2013-07-04 120 views
1

我有一個MySQL查詢,我正在計算在任何給定小時內(在任何給定日期等),在15分鐘內爲用戶預訂了多少次呼叫時間間隔。因此,到目前爲止,我有:使用MySQL計算每個時間間隔內的記錄數

SELECT 
date_action, 
DATE_FORMAT(date_action, "%i") AS minute, 
CASE 
    WHEN minute(date_action) BETWEEN 0 and 14 THEN '00' 
    WHEN minute(date_action) BETWEEN 15 and 29 THEN '15' 
    WHEN minute(date_action) BETWEEN 30 and 44 THEN '30' 
    WHEN minute(date_action) BETWEEN 45 and 59 THEN '45' 
END AS intervals 
FROM 
clients 
WHERE 
HOUR(date_action) = 09 
AND DAY(date_action) = 15 
AND MONTH(date_action) = 07 
AND YEAR(date_action) = 2013 

這非常適用,因爲它不過是神奇的成分,我缺少的是一個分配給每個區間的呼叫數量的「計數」,因此,例如上面的代碼中產生:

Date_time - Minute - Interval 
2013-07-15 09:54:24 - 54 - 45 
2013-07-15 09:29:32 - 29 - 15 
2013-07-15 09:13:33 - 13 - 00 
2013-07-15 09:53:53 - 53 - 45 
2013-07-15 09:00:49 - 00 - 00 

所以,我有我的分鐘轉換成時間間隔,因爲我只想要回1行每個間隔,然後已追加到它在該區間的調用次數的計數列,即

Interval - Count 
45 - 2 
15 - 1 
00 - 2 

我覺得我已經撞在這一塊磚牆上我的頭撞得太久了,所以任何幫助將不勝感激。雖然在查詢之後進行了一些後處​​理,但如果可能的話,我寧願在SQL中完成所有這些操作。 :)

回答

2

您可以按間隔分組並選擇計數。

SELECT 
    count(date_action) as count, 
    CASE 
     WHEN minute(date_action) BETWEEN 0 and 14 THEN '00' 
     WHEN minute(date_action) BETWEEN 15 and 29 THEN '15' 
     WHEN minute(date_action) BETWEEN 30 and 44 THEN '30' 
     WHEN minute(date_action) BETWEEN 45 and 59 THEN '45' 
    END AS intervals 
FROM 
    clients 
WHERE 
    HOUR(date_action) = 09 
    AND DAY(date_action) = 15 
    AND MONTH(date_action) = 07 
    AND YEAR(date_action) = 2013 
    AND rep_id = 28 
GROUP BY intervals 
+0

媽呀,我怎麼沒有看到這一點。坐在離我的屏幕太近的地方我猜!非常感謝。 :) –

0
select period, Sum(NumberOfTimes) as NumberOfTimes 
From 
(Select minute(date_action) % 15 as period, 1 as NumberOfTimes 
From Clients 
WHERE 
    HOUR(date_action) = 09 
    AND DAY(date_action) = 15 
    AND MONTH(date_action) = 07 
    AND YEAR(date_action) = 2013 
    AND rep_id = 28 
) dummyName 
Group By period 

將是另一種方式

%是模運算符

+0

謝謝 - 偉大的有一些不同的選擇。 :) –