Как посчитать число добавленных строк в течении часа (mysql)?

Помогите составить правильно запрос в базу MySql

Нужно посчитать число строк за час в течении суток
т.е количество записей которое было добавлено в течении конкретного часа на протяжении текущих суток.

Сейчас делаю так:
SELECT HOUR(mytable.date),  COUNT(*) FROM mytable.date
WHERE DATE(mytable.date) = CURDATE()
GROUP BY HOUR(mytable.date)


Этот запрос работает замечательно если данные за определенный час есть, но если данных нет то в выборку этот час не попадает.
Собственно вопрос как сделать так чтобы при отсутствии результата база отдавала "0".

Сейчас результат такой (полностью пропущен 3 час):
ЧАС | Число строк
----------
00 | 10
01 | 2
02 | 2
04 | 10
...
23 | 5

Нужно получить такой результат (если данных нет, выводить номер часа и "0"):
ЧАС | Число строк
----------
00 | 10
01 | 2
02 | 8
03 | 0
04 | 10
...
23 | 5
  • Вопрос задан
  • 3412 просмотров
Решения вопроса 1
breefix
@breefix
Технолог
Возможно, это именно то, что и предложил Rsa97:
SELECT allhours.h, IFNULL(mytablehours.c, 0)
FROM (SELECT '01' AS h UNION SELECT '02' UNION SELECT '03' UNION SELECT '04'
      UNION SELECT '05' UNION SELECT '06' UNION SELECT '07' UNION SELECT '08'
      UNION SELECT '09' UNION SELECT '10' UNION SELECT '11' UNION SELECT '12'
      UNION SELECT '13' UNION SELECT '14' UNION SELECT '15' UNION SELECT '16'
      UNION SELECT '17' UNION SELECT '18' UNION SELECT '19' UNION SELECT '20'
      UNION SELECT '21' UNION SELECT '22' UNION SELECT '23' UNION SELECT '00') 
      as allhours
LEFT JOIN (SELECT HOUR(mytable.date) as h, COUNT(mytable.date) as c
	   FROM mytable
	   WHERE DATE(mytable.date) = CURDATE()
	   GROUP BY HOUR(mytable.date))
	   as mytablehours on mytablehours.h = allhours.h
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
С ходу только UNION из 24 SELECT'ов по часу каждый или предварительное дописывание ежечасной отметки. Но проще в программе переносить данные в обнулённый массив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы