我正在尝试根据以下要求编写查询解决方案: " FinalCalledPartyNumber(语音邮件3699)在指定的时间范围内被调用大于X次,例如最后5分钟。"
列如下:
使用自联接,下面的代码会将调用次数的结果集返回到3699,并在电话系统中触发警报。我需要在3699在5分钟内调用大于X次之后才发出警报。我尝试在Group By之后使用带有Count()的Having子句。但它只有在有计数()> = 1时才有效。如果我改为有计数(*)> = 2或更高,它就不会返回行。
以下粗体 Can not 的语法被更改,它是系统生成的SWQL。
Select VoipCallDetailsAlert.ID, VoipCallDetailsAlert.Name From VoipCallDetailsAlert
Join (
SELECT
vcda2.Name AS vcda2_name,
vcda2.FinalCalledPartyNumber AS vcda2_FinalCalledPartyNumber,
vcda2.DateTimeOrigination AS vcda2_DateTimeOrigination
FROM VoipCallDetailsAlert vcda2
WHERE FinalCalledPartyNumber = '3699'
AND vcda2.DateTimeOrigination > DateAdd(mi, -5, GetDate())
Group By vcda2.name, vcda2.FinalCalledPartyNumber, vcda2.DateTimeOrigination
) Results ON vcda2_name = VoipCallDetailsAlert.Name
示例结果:
ID Name FinalCalledPartyNumber DateTimeOrigination
101045 555-123-4567 -> 3699 3699 12/20/15 5:29 PM
101049 555-412-4767 -> 3699 3699 12/20/15 5:36 PM
谢谢,Dobber
答案 0 :(得分:0)
SELECT
VoipCallDetailsAlert.ID,
VoipCallDetailsAlert.Name
From
VoipCallDetailsAlert
JOIN (
SELECT
*,
COUNT(*) OVER (PARTITION BY FinalCalledPartyNumber) fcpnCount
FROM
VoipCallDetailsAlert
WHERE
FinalCalledPartyNumber = '3699'
AND DateTimeOrigination > DATEADD(mi,-5,GETDATE()
) vcda ON VoipCallDetailsAlert.ID = vcda.ID AND fcpnCount >= 2
使用COUNT(*) OVER (PARTITION BY FinalCalledPartyNumber) fcpnCount
会将调用FinalCalledPartyNumber
的次数应用于调用该号码的每条记录。