-3

我有一个日期列表(ann_date),我想在列表中找到下一个日期(从最旧到最新 ann_date 排序),以便我有第二列(next_date)。我使用的是 SQL Server 2008,所以没有 LEAD 功能。

预先感谢您的任何帮助!

4

2 回答 2

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
于 2013-01-10T17:00:12.983 回答
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 统计数据来决定哪个是最适合您的解决方案。

于 2013-01-10T17:04:01.387 回答