【发布时间】:2020-06-17 07:17:30
【问题描述】:
MySQL 8.0 版
我想计算两个日期时间列之间的时间差。 并获取持续时间 >= 12:00:00 的行。
我通常会这样做:
select id
, start_time
, end_time
, timediff(end_time, start_time) as duration
from table;
我会得到这样的东西:
id start_time end_time duration
0 1 2020-06-01 01:00:00 2020-06-01 14:00:00 13:00:00
1 2 2020-06-01 01:00:00 2020-06-01 18:00:00 17:00:00
2 3 2020-06-01 19:00:00 2020-06-02 10:00:00 15:00:00
3 4 2020-06-02 04:00:00 2020-06-02 16:00:00 12:00:00
对于持续时间列,我不希望将 00:00:00 ~ 04:00:00 之间的时间添加到持续时间中。
所以对于第一行持续时间 = 10:00:00 自 01:00 :00~14:00:00 = 10:00:00,忽略 00:00:00 ~ 04:00:00 之间的时间
第二行也是如此,我们从持续时间中减去 3 小时。
所以我想要的输出是:
id start_time end_time duration
0 1 2020-06-01 01:00:00 2020-06-01 14:00:00 10:00:00
1 2 2020-06-01 01:00:00 2020-06-01 18:00:00 14:00:00
2 3 2020-06-01 19:00:00 2020-06-02 10:00:00 11:00:00
3 4 2020-06-02 04:00:00 2020-06-02 16:00:00 12:00:00
有很多行的时间也包括分钟和秒。
提前致谢!
我已经抓取了所有持续时间 >= 12:00:00 的行。
然后根据 start_time 将数据分成 4 个区域。
a_region = 00~04
b_region = 04~12
c_region = 12~16
d_region = 16~24
对于 a_region,我减去了 04:00:00 - start_time,这是我们应该补偿 a_region 中的持续时间的时间。
补偿 = 04:00:00 - 开始时间
补偿时间 = 持续时间 - 补偿。
对于b_region,如果已经过了00~04就不需要补偿了,表示已经过了duration = 12:00:00。
对于 c_region,
补偿 = 16:00:00 - 开始时间
补偿时间 = 持续时间 - 补偿
对于 d_region,因为我们已经获取了持续时间 >= 12:00:00
因此它将通过所有 00~04 补偿时间 = 持续时间 - 04:00:00。
我使用 Python 解决了它,但上面是我使用的逻辑。
【问题讨论】:
-
到目前为止你尝试过什么?你被困在哪里了?您确定要使用纯 MySQL 解决此问题吗?