[MYSQL] - Группировка данных по интервалу времени

SergeyVorobiev

Есть для примера таблица вида ID int,Date timestamp
Задача состоит в том, чтобы вывести за какие нибудь сутки COUNT записей по часам... например
(время) (кол-во_записей)
01:00 3
02:00 0
03:00 5 и т.д.
Я создал таблицу-календарь, состоящую из 24 строк (ID int, hr time) и джоиню так

SELECT cal.hr as time, COUNT(Date) FROM counter_cal as cal
LEFT JOIN counter ON HOUR(DATE_ADD(counter.Date, INTERVAL 1 HOUR = HOUR(cal.hr) GROUP BY cal.hr

Но такая группировка делается по часам. Если же мне надо вывести за какие-либо сутки, то есть добавлю
WHERE Date BETWEEN....
то выводятся только те часы, за которые есть записи... а мне надо, чтобы все часы (24)выводились, а где нет записей просто ноль стоял справа...
Как решить эту проблему?

hprt

в условие джойна засунь проверку

katrin2201

WHERE counter.Date BETWEEN ...

hprt

Не, такой вариант, конечно же, тоже будет работать... также как у автора, ибо ничем не отличается.
Делая проверку по второй таблице ты подразумеваешь, что данные оттуда подтянулись, т.е. это все равно, что INNER JOIN. Надо либо добавить OR date is null, или как написал выше, а не явно указывать таблицу, хотя это не помешает

katrin2201

ну да, а если is null написать, то тогда они будут в каунте считаться
вообще можно к таблице из 24 строк результат исходного запроса прилефтджойнить, и нуллы как нули трактовать

hprt

иногда лучше жевать, чем говорить.
насчет мускуля, конечно, не уверен - видел мягко говоря странное поведение, но это к делу не относится

zya369

чем не устраивает
select hour(Date count(*)
from T
group by hour(Date)
?
PS или нули для часов без записей тоже нужны?

evgen5555

интервалы разные походу

hprt

Просто из любопытства - за что минус? Если из личной неприязни, в отместку или еще за что-то такое, то неважно. Но мало ли, может так делать нельзя (кто знает, может в MySQL это приводит к остановке сервера или это сжирает все ресурсы) - в этом случае, интересно.
PS Вот, блин, тему развели на пустом месте
Оставить комментарий
Имя или ник:
Комментарий: