@rinaz22

Как заполнить пустоту в интервале mysql?

Всем привет. Нужно получить количество записей в БД, сгруппировав по часам или по дням.
Для этого делаю такой запрос:
SELECT
  3600 * FLOOR(`time` / 3600) as `interval`,
  COUNT(`id`) AS `count`

FROM
  `visitor_stat`

WHERE
  `date` >= $sTime
  AND `date <= $eTime

GROUP BY
  1

ORDER BY
  `interval`

Проблемка в том, что например если в базе есть записи с временем 13:00, 14:00 и 16:00, то соответственно выведет 3 записи, а 15:00 не будет учтен, т.к. записей с этим временным диапазоном нет. Как можно добавить тот самый пустой элемент, в примере это 15:00 со значением 0?
Или это лучше сделать после получения и уже в процессе обработки данных?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
WITH RECURSIVE `cte` (`from`, `to`) AS (
  SELECT CAST('00:00' AS TIME), CAST('01:00' AS TIME)
  UNION SELECT `to`, `to` + INTERVAL 1 HOUR
    FROM `cte`
    WHERE `to` < '24:00'
)
SELECT `cte`.`from` AS `interval`, COUNT(*) AS `count`
  FROM `cte`
  LEFT JOIN `visitor_stat` AS `v`
    ON `v`.`time` >= `cte`.`from` AND `v`.`time` < `cte`.`to`
  WHERE `date` >= :sTime AND `date <= :eTime
  GROUP BY `cte`.`from`
  ORDER BY `cte`.`from`
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы