簡體   English   中英

自我聯接中的計數(*)不起作用

[英]Count(*) in Self Join Not working

我試圖根據以下要求編寫查詢解決方案:“在指定的時間范圍內,例如最近5分鍾,調用FinalCalledPartyNumber(voicemail 3699)的次數大於X次。”

列如下:

  • ID-身份列,例如 101045
  • 名稱-電話號碼為3699。 555-123-4567-> 3699
  • FinalCalledPartyNumber-3699
  • DateTimeOrigination-日期時間

使用自聯接,下面的代碼會將呼叫數量的結果集返回到3699,並在電話系統中發出警報。 只有在5分鍾內致電3699次X次以上后,才需要觸發警報。 我試過在Group By之后將 Haveing子句與Count( 一起使用 但是它僅在Haveing Count( )> = 1 時起作用 。如果更改為Haveting Count(*)> = 2或更高,它將不返回行。

下面以粗體顯示的語法不能更改,它是系統生成的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

謝謝,多伯

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的次數應用於調用該號碼的每條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM