SQL: средняя в час, между временами, за несколько дней - PullRequest
3 голосов
/ 25 марта 2011

У меня есть таблица со столбцом START_DATE и END_DATE.

Я хочу получить среднюю разницу во времени между этими временными метками для каждого часа, но только между часами с 9:00 до 18:00 за последние несколько дней.Мне бы хотелось, чтобы результат выглядел так:

elapsed  hour
-------------
2.5      11 <--today at 11AM
1.7      10
2.4      9
1.9      18 <--this is yesterday
2.4      17
4.0      16

Я считаю, что я достаточно близок, но я просто не могу заставить код работать.Вот что у меня есть:

SELECT 
    TRUNCATE(AVG(TIME_TO_SEC(TIMEDIFF(END_DATE, START_DATE))/60), 2) as elapsed,
    EXTRACT(HOUR FROM END_DATE) as hour
FROM 
    TIME_INFO
WHERE
    EXTRACT(HOUR FROM END_DATE) BETWEEN 9 AND 18 AND
    DATE(END_DATE) > CURDATE() - INTERVAL 3 DAY
GROUP BY 
    EXTRACT(HOUR FROM END_DATE)
ORDER BY 
    END_DATE DESC

Это близко, но возвращает только то, что я хочу три дня назад, а не через несколько дней, как хотелось бы.Я использую MySQL 5.0, у кого-нибудь есть идеи?

1 Ответ

3 голосов
/ 25 марта 2011

Если вы хотите несколько дней, вам понадобится день и час в предложении GROUP BY. В настоящее время он усредняет все значения за один и тот же час за несколько дней. (Значения для сегодняшних 11, вчерашних 11 и т. Д. Усредняются вместе)

У меня нет простого способа проверить это, но что-то вроде:

SELECT 
    TRUNCATE(AVG(TIME_TO_SEC(TIMEDIFF(END_DATE, START_DATE))/60), 2) as elapsed,
    EXTRACT(DAY FROM END_DATE) as day,
    EXTRACT(HOUR FROM END_DATE) as hour
FROM 
    TIME_INFO
WHERE
    EXTRACT(HOUR FROM END_DATE) BETWEEN 9 AND 18 AND
    DATE(END_DATE) > CURDATE() - INTERVAL 3 DAY
GROUP BY 
    EXTRACT(DAY FROM END_DATE),
    EXTRACT(HOUR FROM END_DATE)
ORDER BY 
    END_DATE DESC

Если вы хотите, чтобы он работал через границы месяца / года, вы, вероятно, захотите DATE(END_DATE) вместо EXTRACT(DAY FROM END_DATE), и в этом случае вывод может выглядеть примерно так:

elapsed  date        hour
------------------------- 
2.5      2011/03/25  11 <--today at 11AM
1.7      2011/03/25  10
2.4      2011/03/25  9
1.9      2011/03/24  18 <--this is yesterday
2.4      2011/03/24  17
4.0      2011/03/24  16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...