我有一个日期列表(ann_date),我想找到列表中的下一个日期(从最旧到最新的ann_date排序),这样我就有了第二列(next_date)。我正在使用SQL Server 2008,因此没有LEAD功能。
提前感谢您的帮助!
答案 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统计信息来确定哪种解决方案适合您。