簡體   English   中英

查找 7 天范圍內重復的電話號碼

[英]Find repeating phone numbers between a 7 day range

我有一個電話和一個通話日期字段。 我需要找到在 7 天內多次撥打電話 (>1) 的所有電話和通話日期。

最好的方法是什么?

例子:

ID|Phone|CallDate
-----------------
1|5551212|11/21/2020
2|5551212|11/22/2020
3|5551212|10/9/2020 
4|4441212|11/22/2020
5|4441212|11/1/2020 

output:

5551212|11/21/2020
5551212|11/22/2020

這是我嘗試過的示例查詢,但我認為我可以做得更好(此外,它需要很長時間,超過 100 萬條記錄):

  SELECT A1.Phone
  FROM CallDetail A1, CallDetail A2
  WHERE (A1.Phone = A2.Phone) AND (A1.ID <> A2.ID)
  GROUP BY A1.Phone, A1.CallDate, A2.CallDate 
  HAVING COUNT(A1.Phone) > 1 AND DATEDIFF(DAY, A1.CallDate, A2.CallDate) <= 7

您似乎希望lead()lag()將一行上的 calldate 與之前或之后最近的 calldate 進行比較:

select cd.*
from (select cd.*
             lag(cd.calldate) over (partition by cd.phone order by cd.calldate) as prev_calldate,
             lead(cd.calldate) over (partition by cd.phone order by cd.calldate) as next_calldate
      from calldetail cd
     ) cd
where prev_calldate > dateadd(day, -7, calldate) or
      next_calldate < dateadd(day, 7, calldate)
order by phone, calldate;

暫無
暫無

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

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