如何在SQL中比较当前行与上一列下一行

时间:2019-12-04 14:21:27

标签: sql

Date from    Date to    
2018-12-11  2019-01-08   
2019-01-08  2019-02-09  
2019-02-10  2019-03-14  
2019-03-17  2019-04-11   
2019-04-15  2019-05-16  
2019-05-16  2019-06-13  

输出将是这样

Date from     Date to     Days
2018-12-11   2019-01-08   0 
2019-01-08   2019-02-09   1
2019-02-10   2019-03-14   3
2019-03-17   2019-04-11   4 
2019-04-15   2019-05-16   0
2019-05-16   2019-06-13   -

2 个答案:

答案 0 :(得分:0)

您需要lead()和一个日期差异函数:

select 
    date_from,
    date_to,
    datediff(day, date_to, lead(date_from) over(order by date_from)) days
from mytable

datediff()是一个SQLServer函数。在其他RDBMS中具有等效功能。

旁注:对于没有 next 记录的记录,我建议再次使用字符串值(-),因为其他值是数字值(列中的数据类型必须为保持一致)。 null足以满足要求(上面的查询将产生此结果)。

Demo on DB Fiddle

date_from           | date_to             | days
:------------------ | :------------------ | ---:
11/12/2018 00:00:00 | 08/01/2019 00:00:00 |    0
08/01/2019 00:00:00 | 09/02/2019 00:00:00 |    1
10/02/2019 00:00:00 | 14/03/2019 00:00:00 |    3
17/03/2019 00:00:00 | 11/04/2019 00:00:00 |    4
15/04/2019 00:00:00 | 16/05/2019 00:00:00 |    0
16/05/2019 00:00:00 | 13/06/2019 00:00:00 | null

答案 1 :(得分:0)

要以天为单位返回两个日期值之间的差,可以使用DATEDIFF()函数,例如:

SELECT DATEDIFF(DAY, DayFrom, DayTo) AS 'DaysBetween'
FROM DateTable