查找列表中的下一个日期

时间:2013-01-10 16:52:19

标签: sql-server tsql

我有一个日期列表(ann_date),我想找到列表中的下一个日期(从最旧到最新的ann_date排序),这样我就有了第二列(next_date)。我正在使用SQL Server 2008,因此没有LEAD功能。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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统计信息来确定哪种解决方案适合您。