我正在运行以下查询
select DateTime
from Calls
where DateTime > '17 Oct 2018 00:00:00.000' and
DialedNumberID = '1234'
这会给予我一个列表,列出这个号码在特定日期拨打的所有次数。
本质上,我正在寻找的是一个查询,它将给予我每X分钟发生的平均呼叫,并希望运行全年的查询。
谢谢
我正在运行以下查询
select DateTime
from Calls
where DateTime > '17 Oct 2018 00:00:00.000' and
DialedNumberID = '1234'
这会给予我一个列表,列出这个号码在特定日期拨打的所有次数。
本质上,我正在寻找的是一个查询,它将给予我每X分钟发生的平均呼叫,并希望运行全年的查询。
谢谢
3条答案
按热度按时间kpbpu0081#
我猜您有一个名为
Calls
的表,其中包含DateTime
和DialedNumberID
列。您可以使用模式的种类逐年汇总该表中的信息。
这个模式的诀窍是
GROUP BY f(date)
,函数f()
将任何日期缩减到它发生的年份。以5分钟为间隔进行汇总,需要
f(date)
将日期戳减少到5分钟间隔,这个函数比YEAR()
复杂得多。例如,给定
2001-09-11 08:43:00
,则返回2001-09-11 08:40:00
。这是你每隔五分钟的总结。
通过为这个难看的
DATE_FORMAT()
表达式定义一个存储函数,可以使这个查询更加清晰,减少重复,但这是以后的主题了。最后,添加
以按当前年份和特定ID进行过滤。
这个查询需要努力使它尽可能高效。这也是另一天的主题。
专业提示:
DATETIME
是MySQL中的保留字。列名通常不区分大小写。避免将列命名为与保留字相同的名称,在本例中为DateTime
。8ulbf1ek2#
每个时间间隔的平均呼叫数等于呼叫数(
COUNT(*)
)除以监控时段开始和结束之间的分钟数(TIMESTAMPDIFF(minute, period_start, period_end)
),再乘以所需时间间隔内的分钟数(在您的示例中为5分钟)。对于MySQL:
对于SQL Server:
ee7vknir3#
这将强制调用时间为5分钟间隔。请对这些间隔使用“count”和“group by”。使用DateTime作为列名会引起混淆
SELECT DATEADD(分钟,强制转换(日期部分(分钟,[日期时间]作为整数)%5 * - 1,强制转换(格式为([日期时间],“MM/DD/YYYY hh:mm”)作为日期时间))作为调用间隔,按日期分组的调用计数(*)ADD(分钟,强制转换(日期部分(分钟,[日期时间])作为整数)%5 * - 1,强制转换(格式为([日期时间],“MM/DD/YYYY hh:mm”)作为日期时间))