我有一臺名爲預訂與這些字段:(說$從通過時隙分組的MySQL顯示統計
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(150) NOT NULL,
`begin_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
`node_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
我希望在一個給定的時間內,以顯示有關預訂的統計數據 - $直到值來自何處PHP)。用戶預訂一個節點。有很多節點可以預訂,我使用以下查詢按日期顯示預訂統計信息。
SELECT DATE(begin_time) `Date`, count(id) as reservations
FROM reservation
WHERE begin_time > '" . $from . "'
AND end_time < '" . $until . "'
GROUP BY Date"
現在我想給出一天中哪個時間段更加活躍的統計數據。一天中的24小時分爲48個三十分鐘的時段。在我的表中,所有的begin_date和end_date值都是像2011-04-11 20:00:00或2011-04-11 14:30:00那樣的整數。預訂時間可以爲30分鐘,60分鐘等,最長可達4小時。
我想我的統計是按以下格式(或多或少)
Time slot | reservations
----------------------------------
00:00:00 - 00:30:00 | 23
00:30:00 - 01:00:00 | 12
01:00:00 - 01:30:00 | 20
01:30:00 - 02:00:00 | 66
02:00:00 - 02:30:00 | 12
and so on
你能幫助我的SQL查詢?我現在看到PostgreSQL有一些範圍類型和運算符,例如< @(範圍包含)documentation here。這是否意味着如果我使用Postgres,我的查詢會更容易? MySQL有類似的東西嗎?
編輯2:謝謝,tombom。實際上,我改變了你的答案,從select子句和group by子句中刪除了DATE(begin_time)AS Date
,因爲我想查看一天中哪幾小時是最活躍的,在多天的時間段內。我可以生活在1小時的粒度而不是30分鐘。 但我想問你,你的第一句話到底是什麼意思。如果預訂在01:00:00開始,並在03:00:00結束,我確實希望它在兩個時間段都被計算在內。
謝謝,我編輯了我的答案,並請澄清,如果可以的話。 – engineerX 2013-04-09 12:44:16
@engineerX更新了我的答案。 – fancyPants 2013-04-09 13:17:58