Sql server 在列表中查找下一个日期
我有一个日期列表(ann_date),我想在列表中找到下一个日期(从最早的ann_date到最新的ann_date排序),这样我就有了第二列(next_date)。我使用的是SQL Server 2008,因此没有LEAD功能 提前感谢您的帮助 这将有助于您: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.
;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!我已经接受了上面拉马克的答案,但我很欣赏更一般的答案。我以前从未用过外敷。这看起来是一种非常优雅的方式来完成许多任务。