Я пытаюсь сгенерировать запрос, который возвращает результаты по часам и который также показывает нулевые результаты.MYSQL Group by Hour - показывает нулевые результаты
В настоящий момент инструкция MYSQL показывает только результаты, в которых существуют результаты, а не существующие результаты и нулевые результаты.
MYSQL ПОКА
SELECT DATE(received) as Date,
CONCAT(HOUR(received), ':00-', HOUR(received)+1, ':00') AS Hours,
IFNULL(COUNT(*), 0) as Leads from digital_lead
where `received` BETWEEN '2014-11-01' AND '2014-11-25'
GROUP BY DATE(received), HOUR(received)
В настоящее время это показывает каждый день в пределах диапазона дат, деленной на часов, только там, где существует lead
для этого часового интервала. Я хотел бы показать все часы в течение каждого дня, даже если нет данных lead
для этого часа.
Пример
DATE HOUR SLOT LEADS
2014-11-01 00:00 - 01:00 0
01:00 - 02:00 0
02:00 - 03:00 12 ... etc
Я имел взгляд вокруг на Stackoverflow и нашел этот вопрос, который, кажется, похож
Из того, что я понимаю, что нужно создать отдельную таблицу с 24-часовыми слотами и ПРИСОЕДИНЯЙТЕ, что по моему запросу, чтобы показать IFNULL(COUNT(*),0)
, результат по моему запросу.
Может кто-нибудь, пожалуйста, продемонстрировать, как это будет работать на практике?
UPDATE
Используя предложения Клубничный, в ниже вот что у меня сейчас:
SELECT CONCAT(CURDATE(),' 00:00:00') + INTERVAL i2.i*10+i1.i HOUR today
, COUNT(received) total
FROM ints i1
CROSS
JOIN ints i2
LEFT
JOIN digital_lead
ON DATE_FORMAT(received,'%Y-%m-%d %h:00:00') = CONCAT(CURDATE(),' 00:00:00') + INTERVAL i2.i*10+i1.i HOUR
WHERE received BETWEEN '2014-11-01 00:00:00' AND '2014-11-26 00:00:00'
GROUP
BY HOUR(received)
Однако это не показывает никаких результатов, где я знаю, что есть какая-то ...?
(В MySQL) Вы не можете «выбрать» данные, которые не присутствуют. Вы должны каким-то образом имитировать его - либо с помощью таблицы утилиты, либо с помощью UNION select, или, я полагаю, sproc, но проблемы с представлением данных обычно лучше всего оставить на уровне кода приложения. – Strawberry
@Strawberry - Итак, 'CONCAT (HOUR (полученный), ': 00-', HOUR (получено) +1, ': 00') AS Hours,' будет только выбирать часы, присутствующие в поле TIMESTAMP, а не все 24 часа? – aphextwix
Ну, да (дайте или возьмите час) – Strawberry