首页 > 解决方案 > SQL:查找日期之间的差异

问题描述

我搜索了谷歌和堆栈溢出社区,但没有得到我正在寻找的结果

我的表- 包含员工轮班的员工 start_date 和 end_date

id    start_date   end_date
-----------------------------
 1    2019-01-05   2019-01-11
 1    2019-01-15   2019-01-18
 1    2019-01-25   2019-01-31
 2    2019-01-13   2019-01-17
 2    2019-01-21   2019-01-28

预期产出

id    start_date   end_date     total_days_diff
------------------------------------------------
 1    2019-01-05   2019-01-11        4
 1    2019-01-15   2019-01-18        7
 1    2019-01-25   2019-01-31        NA
 2    2019-01-13   2019-01-17        4
 2    2019-01-21   2019-01-28        NA

我想计算 total_days_diff = (下一个班次的开始日期 - 上一个班次的结束日期)

我的查询

select
   e1.start_date,
   e1.end_date,
   datediff(e2.start_date - e1.start_date) as total_days_diff
from emp e1
left join emp e2
on e1.id = e2.id
and e2.start_date > e1.end_date
group by
   e1.start_date,
   e1.end_date

有没有更好的方法来编写上述查询?我没有得到预期的结果

标签: mysqlsql

解决方案


您可以使用lead()

select t.*,
       datediff(lead(start_date) over (partition by id order by start_date),
                end_date
               ) as days_off
from t;

推荐阅读