Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL计算每个时间间隔内的记录数_Mysql_Group By_Minute - Fatal编程技术网

使用MySQL计算每个时间间隔内的记录数

使用MySQL计算每个时间间隔内的记录数,mysql,group-by,minute,Mysql,Group By,Minute,我有一个MySQL查询,我正在运行该查询,以计算在15分钟的时间间隔内,在任何给定的小时(在任何给定的一天等)内,一个用户已经预订了多少个电话。到目前为止,我已经: 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

我有一个MySQL查询,我正在运行该查询,以计算在15分钟的时间间隔内,在任何给定的小时(在任何给定的一天等)内,一个用户已经预订了多少个电话。到目前为止,我已经:

    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
因此,我将分钟数转换为时间间隔,因为我只想为每个时间间隔返回一行,然后在其中附加一列,其中包含该时间间隔内的呼叫数,即

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

我觉得我在这件事上撞砖墙的时间太长了,所以任何帮助都将不胜感激。虽然查询后会进行一些后处理,但如果可能的话,我更愿意使用SQL完成这一切。:)

您可以按间隔分组并选择计数

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
那将是另一种方式


%是模运算符

OMG,我怎么没看到。我猜又坐得离我的屏幕太近了!非常感谢。:)
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