У меня есть таблица в MySQL с некоторыми данными, как это:
id from to
---- -------------------- ---------------------------
1 2013-01-31 23:50:00 2013-02-02 09:00:00
2 2013-02-05 11:21:12 2013-02-08 01:01:01
3 2013-02-08 17:33:44 2013-02-08 18:22:55
4 2013-02-12 01:40:12 2013-02-12 02:00:59
5 2013-02-28 01:40:12 2013-03-02 02:00:59
Мне нужен запрос Mysql или код php для определения разницы между столбцом «от» и столбцом «до» в каждой строке, а также для определения количества секунд в каждом дне между датами «от» и «до», например, для В строке 1 нужный вывод будет примерно таким:
разница между 2013-01-31 23:50:00 — 2013-02-02 09:00:00 для строки 1
2013-01-31: 600 секунд (24:00:00 — 23:50:00 => 600 секунд)
2013-02-01: 86400 сек (24:00:00 — 00:00:00 => 86400 сек)
2013-02-02: 32400 сек (09:00:00 — 00:00:00 => 32400 сек)
и так далее … для каждого ряда
Команда MySQL является предпочтительной. какой код может создать этот вывод? Есть ли какая-либо конкретная функция в PHP или MySQL для создания этого вывода?
Я читаю эти ответы:
mysql рассчитывает секунды между двумя датой / временем для каждого дня
MySQL: как получить разницу между двумя временными метками в секундах
но это не мой ответ.
для информации:
ссылка 1 — это вопрос, похожий на мой вопрос, но ответ неверен, потому что «Команду нужно сгруппировать по дням», но как ?!
и второй не мой вопрос, а первый вопрос, помеченный как дублированный со ссылкой 2, и это не так.
Позвольте мне предположить, что у вас есть таблица дат. Если это так, вы можете использовать join
или коррелированный подзапрос:
select d.date,
(select sum(timestampdiff(second,
greatest(d.date, t.from),
least(d.date, t.to)
))
from table t
where t.to >= d.date and
t.from < date_add(d.date, interval 1 day)
) as NumSeconds
from dates d;
Если у вас нет dates
какая-то таблица, вы можете создать ее на лету:
from (select date('2013-01-31') as date union all
select date('2013-02-01') union all
. . .
) dates
Других решений пока нет …