2009-10-05 2 views
1

У меня есть таблица MySQL, выглядящая так. Это в основном временной лист для задач.Сумма времени между датами в MySQL

id | task | user |   start  |   stop   | running 
------+--------+--------+-----------------------+-----------------------+----------- 
    1 | 12 | 2 | 2009-10-01 10:05:00 | 2009-10-01 14:23:00 | 0 
    1 | 13 | 4 | 2009-10-05 08:58:00 | 2009-10-05 12:16:00 | 0 
    1 | 14 | 3 | 2009-10-05 20:30:00 | 2009-10-05 22:00:00 | 0 

Я хочу суммировать время, затрачиваемое:

1) Сегодня 2) Вчера 3) На этой неделе 4) На прошлой неделе 5) В этом месяце 6) В прошлом месяце

Мне не нужны запросы для каждого из них, но только первый, чтобы я начал. Я не знаком с различными функциями даты в MySQL, и я думаю, что их трудно читать и перемещаться по их документации.

ответ

3

Это не THAT difficult для навигации по документации MySQL.

Вам нужны TIMEDIFF() и TIME_TO_SEC функции.

select SUM(TIME_TO_SEC(TIMEDIFF(stop, start))) from my_table 
    where start >= CURRENT_DATE() and stop <= CURRENT_DATE() + INTERVAL 1 DAY 

даст вам общее время (в секундах), затрачиваемое на выполнение задач сегодня. Посмотрите на DATE_SUB(), если вы собираетесь указывать критерии для других диапазонов (например, в прошлом месяце и т. Д.) В MySQL вместо того, чтобы предоставлять их в качестве параметров для вашего запроса.

+0

Это не будет работать для меня:/ –

+0

К сожалению, я пропустил «+ INVERVAL 1 ДЕНЬ» в том, где. Ред. – ChssPly76

1
SELECT 'TODAY' Date, SUM(TIME_TO_SEC(TIME_DIFF(stop - start))) TimeSpent 
FROM table1 
WHERE start >= CURDATE() 
    AND stop < CURDATE() + INTERVAL 1 DAY 
Смежные вопросы