更新时间:2023-01-29 21:51:30
我会用这个:
SELECT Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0),
Category,
COUNT(Status) TotalCount
FROM MyTable
WHERE Closing_Date >= '2012-02-01'
AND Closing_Date <= '2012-12-31'
AND Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;
这将按每个月的第一天分组,所以
This will group by the first of every month, so
`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)`
将给出 '20130101'
.我通常更喜欢这种方法,因为它将日期作为日期.
will give '20130101'
. I generally prefer this method as it keeps dates as dates.
或者你可以使用这样的东西:
Alternatively you could use something like this:
SELECT Closing_Year = DATEPART(YEAR, Closing_Date),
Closing_Month = DATEPART(MONTH, Closing_Date),
Category,
COUNT(Status) TotalCount
FROM MyTable
WHERE Closing_Date >= '2012-02-01'
AND Closing_Date <= '2012-12-31'
AND Defect_Status1 IS NOT NULL
GROUP BY DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;
这真的取决于你想要的输出是什么.(在您的示例中不需要关闭年份,但如果日期范围跨越年份边界,则可能需要).
It really depends what your desired output is. (Closing Year is not necessary in your example, but if the date range crosses a year boundary it may be).