我是SQL的新手,我想比较两个小时,看看“差异计划”和“差异完成”列中各行之间的区别。
我该如何实现?
谢谢! :)
date id planned done diff plan diff done
21/10/2019 00:00 3252250 A 05:00:00 04:59:04 NULL NULL
21/10/2019 00:00 3251855 A 05:00:00 05:00:18 00:00:00 00:01:14
21/10/2019 00:00 3251868 A 05:07:00 05:07:30 00:07:00 00:07:12
21/10/2019 00:00 3252291 A 05:10:00 05:10:47 00:03:00 00:03:17
答案 0 :(得分:1)
这里是MySQL <8.0的解决方案,其中窗口功能不可用。假设done
列可用于对记录进行排序(如果与您的用例更相关,则可以将done
的所有出现更改为其他列):< / p>
select
t.*,
timediff(t.planned, tlag.planned) diff_plan,
timediff(t.done, tlag.done) diff_done
from mytable t
left join mytable tlag
on tlag.done < t.done
and not exists (
select 1
from mytable t1
where t1.done < t.done and t1.done > tlag.done
)
order by t.done
这可以通过将每个记录与其先前的记录进行自我连接来实现(为此,我们使用带有关联子查询的not exists
条件),以确保当前记录与被连接的记录之间没有记录)。然后,我们使用函数timediff()
计算列planned
和done
的时间差。
样本数据:
| date | id | planned | done |
| ---------- | ------- | -------- | -------- |
| 2019-10-21 | 3252250 | 05:00:00 | 04:59:04 |
| 2019-10-21 | 3251855 | 05:00:00 | 05:00:18 |
| 2019-10-21 | 3251868 | 05:07:00 | 05:07:30 |
| 2019-10-21 | 3252291 | 05:10:00 | 05:10:47 |
结果:
| date | id | planned | done | diff_plan | diff_done |
| ---------- | ------- | -------- | -------- | --------- | --------- |
| 2019-10-21 | 3252250 | 05:00:00 | 04:59:04 | | |
| 2019-10-21 | 3251855 | 05:00:00 | 05:00:18 | 00:00:00 | 00:01:14 |
| 2019-10-21 | 3251868 | 05:07:00 | 05:07:30 | 00:07:00 | 00:07:12 |
| 2019-10-21 | 3252291 | 05:10:00 | 05:10:47 | 00:03:00 | 00:03:17 |
答案 1 :(得分:0)
请查看link。它可能会帮助您。
TIMEDIFF
函数将发现两次之间的差异。