是连续日期

问题描述:

我有一张简单的表格来表示客户编号以及他们何时进行购买。我需要知道任何特定客户何时在连续日期购买以及这些日期是什么。连续日期的数量无关紧要。是连续日期

在这个例子中

 
+----------+--------+ 
| Customer | Date | 
+----------+--------+ 
|  123 | 21-Jan | 
|  123 | 24-Jan | 
|  345 | 21-Jan | 
|  345 | 23-Jan | 
|  345 | 24-Jan | 
|  123 | 26-Jan | 
|  123 | 27-Jan | 
+----------+--------+ 

我需要返回以下

所以:

 
+----------+--------+ 
| Customer | Date | 
+----------+--------+ 
|  123 | 26-Jan | 
|  123 | 27-Jan | 
|  345 | 23-Jan | 
|  345 | 24-Jan | 
+----------+--------+ 

这是一个修改的缺口和孤岛问题。一种解决方案是使用ROW_NUMBER

WITH Cte AS(
    SELECT *, 
     grp = DATEADD(DAY, -ROW_NUMBER() OVER(PARTITION BY Customer ORDER BY Date), Date) 
    FROM tbl 
), 
CteFinal AS(
    SELECT *, 
     cnt = COUNT(Customer) OVER(PARTITION BY Customer, grp) 
    FROM Cte 
) 
SELECT 
    Customer, Date 
FROM CteFinal 
WHERE cnt > 1 

尝试像

SELECT DISTINCT Customer , [Date] 
FROM Table T 
WHERE 
Exists(SELECT 1 FROM Table WHERE [Date] = DATEADD(day,1,T.Date) OR [Date] = DATEADD(day, -1,T.Date)) 

你需要的,如果它包含您的日期格式正确时间