2013-01-10 54 views
-3

我有一個日期列表(ann_date),我想查找列表中的下一個日期(從最舊到最新的ann_date排序),以便我有第二列(next_date)。我正在使用SQL Server 2008,因此沒有LEAD功能。查找列表中的下一個日期

非常感謝您的幫助!

+2

我的收費是$ 45 /小時;請回復接受。 – Kermit

+1

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。你的表模式是什麼? Stackoverflow是一個問答網站,人們可以免費幫他們回答問題,但這不是免費的代碼寫作服務! – GarethD

回答

2

這會幫助你:

;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 
+0

謝謝拉瑪克!我不知道ROW_NUMBER()。很有幫助。 – eqsf

1

有許多的方法可以解決這個。如果只是你需要,那麼你可以使用相關子查詢下一個日期:

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統計數據來決定哪種方案最適合您。

+0

謝謝GarethD!我已經接受了Lamak的答案,但我讚賞更一般的答案。我以前從未使用過外部應用程序。它看起來是一種完成許多任務的非常優雅的方式。 – eqsf

相關問題