Mysql SQL:查找日期之间的差异
我搜索过谷歌和stack overflow社区,但没有得到我要找的结果 我的表格-其中包含员工轮班的开始日期和结束日期Mysql SQL:查找日期之间的差异,mysql,sql,Mysql,Sql,我搜索过谷歌和stack overflow社区,但没有得到我要找的结果 我的表格-其中包含员工轮班的开始日期和结束日期 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-0
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
我想计算总天数(下一班的开始日期-上一班的结束日期)
我的查询
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()
:
您可以使用lead()
:
如果您运行的是8.0之前的MySQL版本,并且没有访问
LEAD()
函数的权限,则可以在第二个表的start\u date
上使用自联接,该表的最小start\u date
大于第一个表的start\u date
:
SELECT e1.*, DATEDIFF(e2.start_date, e1.end_date) AS total_days_diff
FROM emp e1
LEFT JOIN emp e2 ON e2.id = e1.id
AND e2.start_date = (SELECT MIN(start_date)
FROM emp e3
WHERE e3.id = e1.id
AND e3.start_date > e1.start_date)
ORDER BY e1.id, e1.start_date
输出:
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 (null)
2 2019-01-13 2019-01-17 4
2 2019-01-21 2019-01-28 (null)
如果您运行的是8.0之前的MySQL版本,并且没有访问
LEAD()
函数的权限,则可以在第二个表的start\u date
上使用自联接,该表的start\u date
最小值大于第一个表的start\u date
:
SELECT e1.*, DATEDIFF(e2.start_date, e1.end_date) AS total_days_diff
FROM emp e1
LEFT JOIN emp e2 ON e2.id = e1.id
AND e2.start_date = (SELECT MIN(start_date)
FROM emp e3
WHERE e3.id = e1.id
AND e3.start_date > e1.start_date)
ORDER BY e1.id, e1.start_date
输出:
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 (null)
2 2019-01-13 2019-01-17 4
2 2019-01-21 2019-01-28 (null)
哪个版本的MySQL?哪个版本的MySQL?