我有一個日期列表(ann_date),我想查找列表中的下一個日期(從最舊到最新的ann_date排序),以便我有第二列(next_date)。我正在使用SQL Server 2008,因此沒有LEAD功能。查找列表中的下一個日期
非常感謝您的幫助!
我有一個日期列表(ann_date),我想查找列表中的下一個日期(從最舊到最新的ann_date排序),以便我有第二列(next_date)。我正在使用SQL Server 2008,因此沒有LEAD功能。查找列表中的下一個日期
非常感謝您的幫助!
這會幫助你:
;WITH CTE AS
(
SELECT ann_date, ROW_NUMBER() OVER(ORDER BY ann_date) RN
FROM YourTable
)
SELECT A.ann_date, B.ann_date next_date
FROM CTE A
LEFT JOIN CTE B
ON A.RN = B.RN - 1
謝謝拉瑪克!我不知道ROW_NUMBER()。很有幫助。 – eqsf
有許多的方法可以解決這個。如果只是你需要,那麼你可以使用相關子查詢下一個日期:
SELECT Ann_Date,
[Next_Date] = (SELECT MIN(ann_Date)
FROM T T2
WHERE T2.Ann_Date > T.Ann_Date
)
FROM T;
,或者如果你從下一行需要更多的數據可以使用APPLY
SELECT T.Ann_Date
Next_Date = nxt.Ann_Date,
nxt.SomeOtherField
FROM T
OUTER APPLY
( SELECT TOP 1 Ann_Date, SomeOtherField
FROM T T2
WHERE T2.Ann_Date > T.Ann_Date
ORDER BY Ann_Date
) nxt;
你也可以做到這一點使用分析函數和連接。像往常一樣,沒有模式細節或數據,幾乎不可能爲特定的應用程序提供最佳答案,所以使用執行計劃和IO統計數據來決定哪種方案最適合您。
謝謝GarethD!我已經接受了Lamak的答案,但我讚賞更一般的答案。我以前從未使用過外部應用程序。它看起來是一種完成許多任務的非常優雅的方式。 – eqsf
我的收費是$ 45 /小時;請回復接受。 – Kermit
[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。你的表模式是什麼? Stackoverflow是一個問答網站,人們可以免費幫他們回答問題,但這不是免費的代碼寫作服務! – GarethD