2016-01-21 110 views
1

我有一張簡單的表格來表示客戶編號以及他們何時進行購買。我需要知道任何特定客戶何時在連續日期購買以及這些日期是什麼。連續日期的數量無關緊要。是連續日期

在這個例子中

 
+----------+--------+ 
| 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 | 
+----------+--------+ 

回答

0

這是一個修改的缺口和孤島問題。一種解決方案是使用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 
0

嘗試像

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)) 

你需要的,如果它包含您的日期格式正確時間