[英]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.