MYSQL查询以时间间隔计数

时间:2015-03-27 18:47:47

标签: mysql

我的目标是能够每X(5分钟,或每周或每月)间隔绘制呼叫数量,如果没有呼叫,也要指出。在以下示例中,间隔为每5分钟。 call_date和called_num都是mysql表中的字段。 Call_interval和num_calls是我试图用MYSQL查询提取的,而call_interval在我的数据库表中是 NOT (它是否需要??)。

我的MYSQL QUERY应该是什么样的?

这是我所拥有的,但我无法检索结果中的时间间隔和0。

SELECT Count(*) AS num_calls 
FROM cdr 
WHERE DATE(call_date) = CURDATE() 
GROUP BY ( 12 * HOUR( call_date ) + FLOOR( MINUTE( call_date ) / 5 ))

mysql table:
    call_date               called_num
    3/26/2015 8:31:27 AM    555-987-6543
    3/26/2015 8:32:27 AM    555-987-6544
    3/26/2015 8:34:27 AM    555-987-6545
    3/26/2015 8:35:27 AM    555-987-6546
    3/26/2015 8:36:27 AM    555-987-6547
    3/26/2015 8:51:27 AM    555-987-6548
    3/26/2015 8:55:27 AM    555-987-6549

ideal mysql result:

    call_interval           num_calls
    3/26/2015 8:30:00 AM        3
    3/26/2015 8:35:00 AM        2
    3/26/2015 8:40:00 AM        0
    3/26/2015 8:45:00 AM        0
    3/26/2015 8:50:00 AM        1
    3/26/2015 8:55:00 AM        1

     ..... and so on 

     from 3/26/2015 00:00:00 AM 
     to   3/26/2015 11:55:00 PM

谢谢。

1 个答案:

答案 0 :(得分:2)

您将面临的问题是,如果没有提供所有不同间隔值的表,您将无法识别没有条目的间隔。数据表只知道它那里的数据,而不知道不存在的数据。

典型的数据仓库类型的解决方案是具有日期和时间维度表,可用于表示您可能希望在应用程序中使用的所有已知日期和时间值(增量)。在主数据表中,然后将外键写入这些表,而不是(或者可能除了)您捕获的实际时间戳数据。

然后在尝试查询特定间隔时,将日期和时间表连接到主数据表。

这显然意味着一个非常激烈的架构变化。因此,您拥有的另一个选项是根据您所需的时间间隔查询数据,然后将这些计数结果插入应用程序中包含所有可能间隔值的数据结构。