Sql server 在列表中查找下一个日期

Sql server 在列表中查找下一个日期,sql-server,tsql,Sql Server,Tsql,我有一个日期列表(ann_date),我想在列表中找到下一个日期(从最早的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),我想在列表中找到下一个日期(从最早的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

有很多方法可以做到这一点。如果这只是您需要的下一个日期,则可以使用相关子查询:

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统计信息来决定哪种解决方案最适合您。

我的费率是45美元/小时;请回复接受。。您的表模式是什么?Stackoverflow是一个问答网站,人们免费提供时间帮助回答问题,它不是一个免费的代码编写服务!谢谢拉马克!我不知道排号()。非常有帮助,谢谢你,GarethD!我已经接受了上面拉马克的答案,但我很欣赏更一般的答案。我以前从未用过外敷。这看起来是一种非常优雅的方式来完成许多任务。