您可以使用下面的查詢,以返回其連續InstallmentID
數的連續記錄的島嶼:
;WITH CTE_Group AS (
SELECT ID,
InstallmentID,
DateDue,
ROW_NUMBER() OVER (PARTITION BY ID
ORDER BY DateDue) - InstallmentID AS grp
FROM mytable
WHERE DateDue BETWEEN @startDate AND @endDate
), CTE_Count AS (
SELECT ID, InstallmentID, DateDue,
COUNT(*) OVER (PARTITION BY ID, grp) AS cnt
FROM CTE_Group
)
SELECT ID, InstallmentID, DateDue
FROM CTE_Count
WHERE cnt >= 3
如果你想只有3記錄了每個島的,然後您可以使用ROW_NUMBER
和PARTITION BY cnt
條款來提取該島的前3條記錄。
說明:第一CTE,CTE_Group
的查詢,以便識別具有預定時間範圍()內的連續InstallmentID
號碼連續記錄使用「行號特技之間差」。從CTE_Group
輸出:
ID InstallmentID DateDue grp
------------------------------------
8 29 2017-03-15 -28
8 30 2017-04-15 -28
8 32 2017-06-15 -29
8 33 2017-07-15 -29
8 34 2017-08-15 -29
第二CTE,CTE_Count
的查詢,以便計算每個島的人口使用COUNT() OVER()
。從CTE_Count
輸出:
ID InstallmentID DateDue Cnt
-----------------------------------
8 32 2017-06-15 3
8 33 2017-07-15 3
8 34 2017-08-15 3
8 29 2017-03-15 2
8 30 2017-04-15 2
使用CTE_Count
,我們可以很容易地篩選出屬於具有2
以下的人口的島嶼記錄。
Demo here
6,6,7 - 連續的? – DarkKnight
對不起,糾正。 6,7,8 –
如果您有3,4,6,7,8,9,它應該返回什麼? – DarkKnight