有沒有一種方法可以在指定的時間內運行查詢(比如過去5個月),並且能夠返回每月創建多少條記錄?下面是我的表如下所示:如何統計一段時間內每月的記錄數
SELECT rID, dateOn FROM claims
有沒有一種方法可以在指定的時間內運行查詢(比如過去5個月),並且能夠返回每月創建多少條記錄?下面是我的表如下所示:如何統計一段時間內每月的記錄數
SELECT rID, dateOn FROM claims
SELECT COUNT(rID) AS ClaimsPerMonth,
MONTH(dateOn) AS inMonth,
YEAR(dateOn) AS inYear FROM claims
WHERE dateOn >= DATEADD(month, -5, GETDATE())
GROUP BY MONTH(dateOn), YEAR(dateOn)
ORDER BY inYear, inMonth
在這個查詢中WHERE dateOn >= DATEADD(month, -5, GETDATE())
確保它在過去的5個月中,GROUP BY MONTH(dateOn)
然後允許它每月來算。
爲了安撫社區,這裏有一個SQL Fiddle來證明它。
SELECT
count(rID) as Cnt,
DatePart(Month, dateOn) as MonthNumber,
Max(DateName(Month, dateOn)) as MonthName
FROM claims
WHERE dateOn >= DateAdd(Month, -5, getdate())
GROUP BY DatePart(Month, dateOn)
不像其他兩個答案,這將返回所有5個月,甚至當計數爲0。它也將使用索引的onDate列,如果有合適的一個存在(其他兩個答案爲止是不可改變的)。
DECLARE @nMonths INT = 5;
;WITH m(m) AS
(
SELECT TOP (@nMonths) DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-number, 0)
FROM master.dbo.spt_values WHERE [type] = N'P' ORDER BY number
)
SELECT m.m, num_claims = COUNT(c.rID)
FROM m LEFT OUTER JOIN dbo.claims AS c
ON c.onDate >= m.m AND c.onDate < DATEADD(MONTH, 1, m.m)
GROUP BY m.m
ORDER BY m.m;
您還沒有TOP
子句中使用變量,但這可能使代碼的可重用性(例如,你可以傳遞的月數作爲參數)。
您需要一個fitler和一個帶聚合的「GROUP BY」。 – Kermit