2013-07-04 52 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

谢谢 - 伟大的有一些不同的选择。 :) –