如何使用datetime sql获取平均每5分钟的呼叫数
我正在运行以下查询如何使用datetime sql获取平均每5分钟的呼叫数,sql,sql-server,qsqlquery,Sql,Sql Server,Qsqlquery,我正在运行以下查询 select DateTime from Calls where DateTime > '17 Oct 2018 00:00:00.000' and DialedNumberID = '1234' 这会给我一个在特定日期拨打这个号码的所有时间的列表 基本上,我正在寻找的是一个查询,它将为我提供平均每X分钟发生一次的调用,并希望全年运行该查询 谢谢我猜您有一个名为Calls的表,其中包含DateTime和dialledNumberId列 您可以使用这种模式
select DateTime
from Calls
where DateTime > '17 Oct 2018 00:00:00.000' and
DialedNumberID = '1234'
这会给我一个在特定日期拨打这个号码的所有时间的列表
基本上,我正在寻找的是一个查询,它将为我提供平均每X分钟发生一次的调用,并希望全年运行该查询
谢谢我猜您有一个名为
Calls
的表,其中包含DateTime
和dialledNumberId
列
您可以使用这种模式每年汇总该表中的信息
SELECT YEAR(`DateTime`),
DialedNumberID,
COUNT(*) call_count
FROM Calls
GROUP BY YEAR(`DateTime`), DialedNumberID
这种模式的诀窍是按f(日期)
分组。函数f()
将任何日期减少到发生日期的年份
按五分钟间隔汇总,您需要f(date)
将日期戳缩短为五分钟间隔。这个函数比YEAR()
复杂得多
例如,给定2001-09-11 08:43:00
,这将返回2001-09-11 08:40:00
这是你每隔五分钟的总结
SELECT DATE_FORMAT(`DateTime`,'%Y-%m-%d %H:00')+INTERVAL(MINUTE(`DateTime`)-MINUTE(datestamp) MOD 5) interval_beginning,
DialedNumberID,
COUNT(*) call_count
FROM Calls
GROUP BY DATE_FORMAT(`DateTime`,'%Y-%m-%d %H:00')+INTERVAL(MINUTE(`DateTime`)-MINUTE(datestamp) MOD 5),
DialedNumberID
通过为丑陋的DATE\u FORMAT()。但这是另一天的话题
最后,追加
WHERE YEAR(`DateTime`) = YEAR(NOW())
AND DialedNumberID = '1234'
按当前年份和特定id筛选的查询
此查询需要努力使其尽可能高效。这也是另一天的话题
Pro提示:DATETIME
是MySQL中的保留字。列名通常不区分大小写。避免将列命名为与保留字相同的DateTime
。每个间隔的平均调用量是调用次数(COUNT(*)
)除以监控时段开始和结束之间的分钟数(TIMESTAMPDIFF(分钟,时段开始,时段结束)
)乘以所需间隔内的分钟数(示例中为五分钟)
对于MySQL:
select count(*) / timestampdiff(minute, date '2018-01-01', now()) * 5 as avg_calls
from calls
where `datetime` >= date '2018-01-01'
and dialednumberid = 1234;
对于SQL Server:
select count(*) * 1.0 / datediff(minute, '20180101', getdate()) * 5 as avg_calls
from calls
where [datetime] >= '20180101'
and dialednumberid = 1234;
结果会是怎样的呢?一个数字代表X分钟内的平均通话量?您被困在哪里?您面临的问题是什么?您需要我们提供答案?是的,只需要一个号码,但查询不起作用选择count(*)/timestampdiff(分钟,日期'2018-01-01',now())*5,因为平均通话时间为DateTime
>=日期'2018-01-01',拨打的号码为1234;预期的输出是什么?当我为sql server寻找答案时,Apologies将其标记为mysql。。。因此,此查询似乎不适用于SQL Server。函数名为DATEDIFF
,NOW
为GETDATE
,不支持ANSI日期文字,名称用括号括起来,整数除法超过小数。如何还可以获得每5分钟间隔的最大调用次数这有点困难。例如,如果我看1:00-1:05,1:05-1:10。。。我最多可以接到五个电话,但如果我看1:01-1:06,1:06-1:11。。。我可能会突然接到最多十个电话,或者只有两个电话。那么,您想如何定义五分钟的间隔?可能会查看每个记录/时间,并计算五分钟前发生的记录,从所有这些记录中取最大值。事实上,我只会在五分钟间隔内查看最大值
select count(*) * 1.0 / datediff(minute, '20180101', getdate()) * 5 as avg_calls
from calls
where [datetime] >= '20180101'
and dialednumberid = 1234;