[英]SQL query to get records of a timeframe with sequence of events related to the same identifier
我正在學習 SQL,我堅持這個:
我有這個帶有日期格式 (dd/mm/yyyy) 的示例表:
日期 | ID | 地位 |
---|---|---|
2022 年 10 月 9 日 | xxx | 打開 |
07/07/2022 | xxx | 發表 |
01/06/2022 | xxx | 發送 |
10/08/2022 | yyy | 打開 |
08/08/2022 | yyy | 發表 |
01/08/2022 | yyy | 發送 |
我想獲取最近3個月的記錄:
SELECT * FROM TABLE WHERE Date >= DATEADD(DAY, -90, GETDATE())
AND
Date <= DATEADD(DAY, 0, GETDATE())
效果很好,但我的問題是所有狀態(已發送、已交付和已打開)都應包含在時間范圍內的每個 ID。
所以上面的查詢會完美地得到我的 ID yyy
但對於xxx
它會破壞它,因為發送的狀態行是在 01/06/2022
我嘗試group by ID
並使用Status IN ('sent','delivered','opened')
但它不起作用並顯示所有記錄!
想要的 output與 yyy 的記錄只是同一張表,因為 xxx 狀態“已發送”的一條記錄超出了時間范圍。
效果很好,但我的問題是所有狀態(已發送、已交付和已打開)都應包含在時間范圍內的每個 ID。
添加條件以僅過濾在時間范圍內具有所有 3 種狀態的 ID:
SELECT *
FROM TABLE
WHERE Date >= DATEADD(DAY, -90, GETDATE())
AND Date <= DATEADD(DAY, 0, GETDATE())
QUALIFY COUNT(DISTINCT CASE WHEN Status IN ('sent','delivered','opened')
THEN status END)
OVER(PARTITION BY Id) = 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.