次のコードがあります。MS SQL 2008 の使用
use gasnominations;
update dbo.TestData
set amendedValue =
(select amendedvalue
from gasdata
where readDate between DateAdd(Hour, 7, DateAdd(Day, DateDiff(Day, 0, GETDATE()), -2))
and dateadd(hour, 6, DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)))
基本的に、いくつかの列を持つテーブルがあります.1つは日付(readdate)、もう1つは修正値、最後の列は参照番号です。毎日 350 行が SQL ジョブで挿入されます。したがって、readdate は時間の日付であり、ref 番号ごとに 24 のレコード (1 時間ごとに 1 つ) があります。データは昨日の午前 6 時から今日の午前 6 時まで挿入されます。
前日から修正された値を取得するジョブに別のステップを作成したい (したがって、今日が月曜日の場合、土曜日の午前 6 時から日曜日の午前 6 時までの各時間と参照番号の修正された値を取得し、修正された値を更新します)。今日 (つまり、日曜日の午前 6 時から月曜日の午前 6 時)
それが理にかなっていることを願っています。
アップデート
私は今、次のようになりましたが、2012 年 11 月から毎日テーブルからすべての行を追加します。ただし、修正された値は追加されます。
INSERT INTO dbo.testdata (readDate,TagName,Value, amendedValue)
select a.readDate, a.TagName, a.Value, b.amendedValue
from gasdata a inner join gasdata b on b.TagName = a.tagName COLLATE DATABASE_DEFAULT
and a.readDate = DATEADD(DAY, 1, b.readDate)