Mysql DateTime группа по 15 минут - PullRequest
5 голосов
/ 27 ноября 2010

У меня есть таблица, которая выглядит следующим образом

CREATE TABLE `time_table` (
 `id` INT(10) NOT NULL AUTO_INCREMENT,
 `creationDate` DATETIME NOT NULL,
 PRIMARY KEY (`id`)
)

Я в основном храню время создания определенных записей в таблице.Я знаю, если я хочу получить количество записей, созданных с интервалом в 15 минут, я буду использовать что-то вроде этого

SELECT FLOOR(UNIX_TIMESTAMP(creationDate)/900) AS t, 
COUNT(*) FROM time_table
GROUP BY t

Это дает мне что-то вроде этого

t          COUNT(*)
1434187    1
1434188    3
1434189    2
1434190    2

Какпонять смысл первого столбца?Если я хочу, чтобы это показало мне что-то вроде

t                 COUNT(*)
2:00pm - 2:15pm   1
2:15pm - 2:30pm   3
2:30pm - 2:45pm   2
2:45pm - 3:00pm   2

, я понимаю, что с некоторой манипуляцией я мог получить 1434187, чтобы показать в 14:15.Даже это может быть хорошим началом ... тогда с некоторой логикой я мог бы показать весь период.Спасибо!

Ответы [ 3 ]

7 голосов
/ 19 февраля 2014

Вот решение, которое я использую:

SELECT  FROM_UNIXTIME(FLOOR( UNIX_TIMESTAMP(creationDate)/900 ) * 900) AS t, COUNT(*) FROM time_table GROUP BY t

Хотя оно появится 4 года спустя, надеюсь, оно кому-нибудь пригодится.

7 голосов
/ 27 ноября 2010

Один из способов - просто использовать > и <, чтобы получить все в пределах диапазона, но вам может показаться, что это проще:

SELECT ... 

GROUP BY ( 4 * HOUR( thistime ) + FLOOR( MINUTE( thistime ) / 15 )) 

из http://forums.mysql.com/read.php?10,202789,202807

5 голосов
/ 03 сентября 2014

Ответ 2 работает только в течение 24 часов - попробуйте этот;

SELECT ...

GROUP BY year(date),month(date),day(date),( 4 * HOUR( date ) + FLOOR( MINUTE( date ) / 15 )) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...