2015-09-16 2 views
1

У меня есть столбец date_of_post в моей таблице, которая выглядит следующим образом (пример) 2015-08-31 11:00:00Попытка получить 3 часа данных SQL, отображаемых на 5 минут

я использую INTERVAL 1 DAY, чтобы получить последние 24 часа и он прекрасно работает ,

SELECT DATE_ADD(date(t.date_of_post), INTERVAL hour(t.date_of_post) HOUR) AS dateTime, count(*) as entries 
     FROM `soc_stat` t 
     WHERE main_tag = 'coffee' AND t.date_of_post > DATE_SUB(NOW(), INTERVAL 1 DAY) 
     GROUP BY date(t.date_of_post), hour(t.date_of_post) 

Однако теперь я хотел бы вернуть последние 3 часа на 5 минут. Таким образом, он вернет что-то по линиям

2015-08-31 12:05:00 = 11 
2015-08-31 13:10:00 = 23 
2015-08-31 14:15:00 = 7 
2015-08-31 15:20:00 = 12 

Я не очень силен в SQL. Я попытался изменить INTERVAL hour(t.date_of_post) HOUR на INTERVAL minute(t.date_of_post) MINUTE, а затем я изменил INTERVAL 1 DAY на INTERVAL 1 HOUR. Я думал, что вернет записи через минуты вместо часов, но, похоже, это не так. И тогда я бы попытался выяснить, как вернуть его за 5 минут, а не каждую минуту.

Как я могу получить все записи за последние 3 часа каждые 5 минут?

+0

возможно дубликат [Группировка в интервале 5 минут в пределах диапазона времени] (http://stackoverflow.com/questions/4342370/grouping-into-interval-of-5-minutes-within-a- временной диапазон) – jlhonora

ответ

1

Следующий запрос даст вам данные каждые 5 минут.

Вы можете добавить фильтр в where clause согласно вашему требованию.

SELECT 
DATE_ADD(date(t.date_of_post), INTERVAL hour(t.date_of_post)*60+(minute(t.date_of_post) div 5)*5 MINUTE) AS dateTime, 
count(*) as entries 
     FROM `soc_stat` t 

     GROUP BY date(t.date_of_post), hour(t.date_of_post),minute(t.date_of_post) div 5 
Смежные вопросы