时间间隔中的MYSQL查询计数
我的目标是能够将每X(5分钟,或每周或每月)的通话次数绘制成图表,如果没有通话,也要指出这一点。在以下示例中,间隔为每5分钟一次。call_date和called_num都是mysql表中的字段。Call\u interval和num\u calls是我试图通过MYSQL查询提取的,Call\u interval在我的数据库表中是而不是(是否需要是??) 我的MYSQL查询应该是什么样子 这是我所拥有的,但我无法检索结果中的时间间隔和0时间间隔中的MYSQL查询计数,mysql,Mysql,我的目标是能够将每X(5分钟,或每周或每月)的通话次数绘制成图表,如果没有通话,也要指出这一点。在以下示例中,间隔为每5分钟一次。call_date和called_num都是mysql表中的字段。Call\u interval和num\u calls是我试图通过MYSQL查询提取的,Call\u interval在我的数据库表中是而不是(是否需要是??) 我的MYSQL查询应该是什么样子 这是我所拥有的,但我无法检索结果中的时间间隔和0 SELECT Count(*) AS num_calls
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
谢谢。您将面临的问题是,如果没有提供所有不同间隔值的表,您将无法识别没有条目的间隔。数据表只知道它所在的数据,而不知道不存在的数据 解决这一问题的典型数据仓库类型是具有日期和时间维度表,可用于表示您可能希望在应用程序中使用的所有已知日期和时间值(增量)。然后,在主数据表中,将外键写入这些表,而不是(或者可能附加)捕获的实际时间戳数据 然后,在尝试查询某些时间间隔时,将日期和时间表与主数据表关联起来
这显然意味着一个非常剧烈的模式变化。因此,另一种选择是根据所需的时间间隔简单地查询数据,然后将这些计数结果放入应用程序中保存所有可能的时间间隔值的数据结构。如果使用
UNIXTIME(call_date)/(60*5)
更干净,谢谢,我认为构建必要的间隔值并使用此表运行查询可能是我的最佳选择。非常感谢。