我有一个日期列表(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
有很多方法可以解决这个问题。如果它只是您需要的下一个日期,那么您可以使用相关子查询:
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 统计数据来决定哪个是最适合您的解决方案。