СУММА MySQL большой TIMEDIFF - PullRequest
       2

СУММА MySQL большой TIMEDIFF

0 голосов
/ 24 августа 2018

У меня есть операция с таблицей SQL с двумя полями с именем start_at, конечный_кат, каждое из которых является столбцом Datetime, и поле aircraft_id.

Давайте назовем интервал "конец_запуска-начало" длительностью.

Моя цель для каждого самолета_ид получить сумму интервала каждого действия за определенный период.

По сути, это было бы что-то вроде

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))))
FROM activity
WHERE started_at > :started_at
AND ended_at < :ended_at
GROUP BY airplane_id

Проблема в том, что мой обработанный период может превышать максимальный размер времени (около 838 часов), и я ищу эффективный обходной путь.

Прежде чем бросить и просто извлечь необработанные данные и обработать их в PHP, я надеюсь, что некоторый гений SQL может спасти меня.

С наилучшими пожеланиями,

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Почему бы вам не использовать timestampdiff()?

SELECT sum(timestampdiff(SECOND, ended_at, started_at))
       FROM activity
...

Возвращает integer, поэтому вам не придется иметь дело с ограничениями time (но, конечно, с integer.) И вам не понадобится это преобразование в секунды, поскольку вы уже можно получить результат в считанные секунды.

0 голосов
/ 27 августа 2018

Спасибо всем за ваши ответы.

Как я и думал, нет никакого способа сделать свое дело на чистом SQL, и для этого потребуется некоторая обработка PHP.

Итак, я будупойти на массовое лечение PHP.

Спасибо всем!

0 голосов
/ 24 августа 2018

Как насчет представления результата в виде дробных часов или дней, а не времени?

SELECT SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))) / (60 * 60) as fractional_hours

Или:

SELECT SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))) / (24 * 60 * 60) as fractional_hours

Лично я не вижу большой ценности в использовании формата времени для таких больших интервалов времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...