mysql - 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
有没有更好的方法来编写上述查询?我没有得到预期的结果
解决方案
您可以使用lead()
:
select t.*,
datediff(lead(start_date) over (partition by id order by start_date),
end_date
) as days_off
from t;
推荐阅读
- java - 如何重新启动 gui 应用程序游戏,例如再次玩
- rest - 在 REST API 中,我可以在路径和查询字符串参数之间拆分资源标识符吗?
- reactjs - 需要更清晰的解释如何避免使用 React 钩子进行无限重新渲染
- regex - 如何在 golang 中打开所有格式为“test*.txt”的文件
- arrays - 使用 ARRAYFORMULA 检测 Google 表格中的重复项
- logging - 使用 workbox-webpack-plugin 时启用日志记录
- flutter - 使用 LayoutBuilder() 仅调用一次函数 - Flutter
- flutter - 如何在颤振中添加额外的文本框
- c - 将字符串节点添加到表达式树
- git - 差异 GitLab 维基