簡體   English   中英

查找具有連續日期的行

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

如果NameDate的組合在表中是唯一的,則可以從COUNT(DISTINCT t2.Date)中刪除DISTINCT

請參閱演示

暫無
暫無

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

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