[英]Find rows with consecutive dates
是否可以知道哪位顧客連續 3 天光顧了酒吧? (約翰在我的情況下)
提前致謝
名稱 | 年齡 | 日期 | 數量 |
---|---|---|---|
保羅 | 12 | 2021-12-01 | 20 |
約翰 | 19 | 2021-12-01 | 10 |
傑克 | 17 | 2021-13-01 | 7 |
約翰 | 19 | 2021-13-01 | 8個 |
約翰 | 19 | 2021-14-01 | 17 |
所以我會通過
SELECT FROM Table
LEFT JOIN Table As PrevDay on PrevDay.Customer = Table.Customer
AND PrevDay.date = DATEADD(DAY,-1,Table.Date)
LEFT JOIN Table AS NextDay on NextDay,Customer = Table.Customer
AND NextDay.Date = DATEADD(DATE,1,Table.Date)
WHERE PrevDay.Customer is not NULL
AND NextDay.Customer is not null
假設列Date
的數據類型是DATE
您可以使用自連接和聚合:
SELECT DISTINCT t1.Name
FROM tablename t1 INNER JOIN tablename t2
ON t2.Name = t1.Name AND ABS(DATEDIFF(t1.Date, t2.Date)) = 1
GROUP BY t1.Name, t1.Date
HAVING COUNT(DISTINCT t2.Date) = 2;
或者,更具可擴展性的解決方案:
SELECT DISTINCT t1.Name
FROM tablename t1 INNER JOIN tablename t2
ON t2.Name = t1.Name AND t2.Date BETWEEN t1.Date AND t1.Date + INTERVAL 2 DAY
GROUP BY t1.Name, t1.Date
HAVING COUNT(DISTINCT t2.Date) = 3;
如果Name
和Date
的組合在表中是唯一的,則可以從COUNT(DISTINCT t2.Date)
中刪除DISTINCT
。
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.