Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:查找日期之间的差异_Mysql_Sql - Fatal编程技术网

Mysql SQL:查找日期之间的差异

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

我搜索过谷歌和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-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?