MySQL версия 8.0
Я хочу рассчитать разницу во времени между двумя столбцами datetime. И получите строки, где duration> = 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
Есть много строк, где время также включает минуты и секунды.
Заранее спасибо!
Я взял все строки, где duration> = 12: 00: 00.
Затем данные разделены на 4 региона в зависимости от их start_time.
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.
compatio n = 04:00:00 - начальное_время
компенсированное_время = длительность - компенсация.
Для b_region компенсация не требуется, если прошло 00 ~ 04, это означает, что продолжительность уже прошла = 12:00:00.
Для c_region,
компенсация = 16:00:00 - время начала
компенсированное_время = продолжительность - компенсация
Для d_region, поскольку мы получили длительность> = 12:00:00
он передаст все 00 ~ 04, поэтому компенсированное_время = продолжительность - 04: 00: 00.
Я решил это с помощью Python, но выше это logi c, который я использовал .