2010-11-27 117 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))