2012年に導入されたlead
/lag
関数を使用することはできませんが、次の/前の行の値を取得できないわけではありません。
作成し、移入したサンプルテーブル(私たちのセーブくださいあなたの将来の質問では、このステップ)
DECLARE @T As Table
(
EffectiveStartDTM datetime,
EffectiveEndDTM datetime,
CurrentRecInd tinyint,
LoadID int,
LoadDTM datetime
)
INSERT INTO @T VALUES
('2016-06-13 13:05:09.000', NULL, 1, 130272, '2016-06-13 13:05:09.000'),
('2016-06-27 10:27:13.000', NULL, 1, 133819, '2016-06-27 10:27:13.000'),
('2016-07-04 10:05:23.000', NULL, 1, 135323, '2016-07-04 10:05:23.000'),
('2016-07-11 12:11:52.000', NULL, 1, 136943, '2016-07-11 12:11:52.000')
更新:あなたは、サブクエリが必要
UPDATE T1
SET EffectiveEndDTM = (
SELECT TOP 1 EffectiveStartDTM
FROM @T T2
WHERE T2.EffectiveStartDTM > T1.EffectiveStartDTM
ORDER BY T2.EffectiveStartDTM
)
FROM @T T1
テスト更新が成功しました:
SELECT EffectiveStartDTM, EffectiveEndDTM, CurrentRecInd, LoadID, LoadDTM
FROM @T
結果:
EffectiveStartDTM EffectiveEndDTM CurrentRecInd LoadID LoadDTM
----------------------- ----------------------- ------------- ----------- -----------------------
2016-06-13 13:05:09.000 2016-06-27 10:27:13.000 1 130272 2016-06-13 13:05:09.000
2016-06-27 10:27:13.000 2016-07-04 10:05:23.000 1 133819 2016-06-27 10:27:13.000
2016-07-04 10:05:23.000 2016-07-11 12:11:52.000 1 135323 2016-07-04 10:05:23.000
2016-07-11 12:11:52.000 NULL 1 136943 2016-07-11 12:11:52.000
実際のテーブル? –
SQL Server 2008 R2、申し訳ありません。 – Sharktooth
'ORDER BY'節**を明示的に指定しない限り、' first'、 'second'、' successive'および 'last'はSQL **では意味を持ちません。あなたの注文は何ですか? –