既然是2008年r2,那麼您不能使用2012年推出的lead
/lag
函數,但這並不意味着您無法獲得下一個/ prev行的值。你只需要一個子查詢:
創建和填充示例表(請保存我們這一步在你未來的問題)
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
哪些DBMS您使用的是真正的表? –
SQL Server 2008 R2,對不起,我錯過了提到的問題。 – Sharktooth
除非您明確指定ORDER BY子句**,否則'first','second','consecutive'和'last'在SQL **中沒有意義。你的訂單是什麼? –