Как получить совокупный результат каждые 3 часа в конкретную дату в MySQL?

0

У меня есть следующая таблица. И я пытаюсь получить общее количество продуктов за каждые 3 часа, а также хочу отображать 0, если ни один продукт не существует в определенный период, а не отображает только существующие записи.

Изображение 174551

Я ближе и могу получать записи каждый час, но не в течение 3 часов. Пожалуйста, найдите следующие запросы, которые я использовал.

CREATE TABLE 'integers' (
'i' int(11) NOT NULL,
 PRIMARY KEY ('i')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert  into 'integers'('i') values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23);

а также

SELECT hr + INTERVAL 1 HOUR AS 'date', COUNT(products.product_id) AS product_count
FROM (  
   SELECT 
     FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(CURRENT_TIMESTAMP)/3600)*3600+1800) - INTERVAL i HOUR AS hr
   FROM integers 
   WHERE i BETWEEN 0 AND HOUR(NOW())) AS times
LEFT OUTER JOIN product AS products 
ON products.'updated_on' >= hr
   AND products.'updated_on'  < hr + INTERVAL 1 HOUR
   AND products.'updated_on' > DATE(NOW())
GROUP 
BY hr
ORDER 
BY hr

С вышеуказанными запросами я могу получить агрегированный результат за каждый 1 час и вывод следующим образом

Изображение 174551

Но я хочу сделать это каждые 3 часа. Я чего-то не хватает, и я не могу понять это.

  • 0
    Хотите ли вы результат только для текущей даты?
  • 0
    @PaulSpiegel Да. А пока оставим это на текущую дату
Теги:

1 ответ

1
Лучший ответ

Попробуйте что-то вроде этого (с использованием оператора modulo):

SELECT hr.i as hr_from,
       hr.i + 3 as hr_to,
       COUNT(p.product_id) AS product_count
FROM integers hr
LEFT OUTER JOIN product AS p
ON p.updated_on >= DATE(NOW())
   AND HOUR(p.updated_on) BETWEEN hr.i and hr.i + 2
WHERE hr.i MOD 3 = 0
GROUP BY hr.i
ORDER BY hr.i
  • 0
    Он дает результат в одной строке, хотя я ожидаю тот же результат, о котором я упоминал, но с агрегированным результатом для каждых 3 часов, а не для 1 часа
  • 0
    @KishoreKumarKorada - я забыл предложение GROUP BY. Сейчас исправлено.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню