gpt4 book ai didi

sql - 如何根据特定条件查找表中的下一个值

转载 作者:行者123 更新时间:2023-12-02 20:16:58 24 4
gpt4 key购买 nike

我有一张 table :

ID | Name | Date
1 | ABC | 2015-01-01
2 | XYZ | 2015-01-02
3 | ABC | 2015-01-03
4 | ABC | 2015-01-04

我想查询该表,结果如下:

ID | Name | Date       | NextDate
1 | ABC | 2015-01-01 | 2015-01-03
2 | XYZ | 2015-01-02 | null
3 | ABC | 2015-01-03 | 2015-01-04
4 | ABC | 2015-01-04 | null

一个解决方案是:

select t1.*,
(select min(t2.Date) from TAB t2 where t2.ID > t1.ID t2.Name = t1.Name) NextDate
from TAB t1

但是这非常慢,因为我们正在对每一行进行聚合。有没有比上面更有效的替代解决方案?

最佳答案

由于SQL SERVER 2008不支持LEAD窗口函数,我们必须使用row_numberself join来模拟它>。试试这个

;WITH cte
AS (SELECT t1.*,
Row_number()
OVER(
partition BY Name
ORDER BY [Date]) AS rn
FROM TAB t1)
SELECT a.ID,a.Name,a.Date,b.Date as nextdate
FROM cte a
LEFT OUTER JOIN cte b
ON a.Name = b.Name
AND a.rn + 1 = b.rn ORDER BY a.ID

关于sql - 如何根据特定条件查找表中的下一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com