2010-11-27 119 views
5

我有一个表,看起来像这样mysql的日期时间按15分钟

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在下午2:15出现。即使这可能是一个好的开始....然后用一些逻辑我可以显示整个时期。谢谢!

回答

7

一种方法是只使用><为了得到一个范围内的一切,但你会发现这是简单的:

SELECT ... 

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

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

+1

+1对于简单和干净的解决方案,但出现错误,计数不正确...(在选择...),它只能工作24小时... – Dani 2012-02-25 06:31:02

7

下面是解我使用:

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

尽管它到了4年后,希望它会对某人有用。

5

答案2只适用于24小时 - 试试这个;

SELECT ... 

GROUP BY year(date),month(date),day(date),(4 * HOUR(date) + FLOOR(MINUTE(date)/15))