0
我有3個表格,人員,會員和俱樂部。我想知道哪些5年期間註冊人數最多。從我聽說SQL Server 2012中沒有FOR循環,所以我該怎麼做?謝謝。事情是這樣的:在一系列值上運行相同的查詢
SELECT count(*)
FROM Membership
WHERE Membership.date>=x-01-01
AND Membership.date<x+10-12-31
我有3個表格,人員,會員和俱樂部。我想知道哪些5年期間註冊人數最多。從我聽說SQL Server 2012中沒有FOR循環,所以我該怎麼做?謝謝。事情是這樣的:在一系列值上運行相同的查詢
SELECT count(*)
FROM Membership
WHERE Membership.date>=x-01-01
AND Membership.date<x+10-12-31
您可以在SQL Server與WHILE
和CURSOR
模擬FOR循環。但是與Oracle的FOR
相比,它有瘋狂的開銷。但是幾乎每當你考慮在SQL Server中使用循環時,你都會犯錯。
您的問題可以通過遞歸CTE來解決,並且加入:
;WITH Periods AS (
SELECT CAST('2000-01-01' AS Date) AS StartDate,
CAST('2004-12-31' AS Date) AS EndDate
UNION ALL
SELECT DATEADD(year,1,StartDate),
DATEADD(year,1,EndDate)
FROM Periods
WHERE StartDate < '2014-01-01'
)
SELECT p.StartDate,
p.EndDate,
COUNT(m.*)
FROM Memberships m
INNER JOIN Periods p ON m.Date BETWEEN p.StartDate AND p.EndDate
GROUP BY p.StartDate, p.EndDate
的WITH
語句定義含5年期每年爲2000年至2014年之間的遞歸CTE其調整需要。