如果一个表Event
包含一个名为EventTime
的DateTime类型的字段,并且该值将包含日期和时间元素,我需要创建一个汇总查询,该查询计算每个月的事件数量
分组依据字段的结果类型也必须是具有0时间元素的日期时间,并设置为该月的第1天。
这是我迄今为止所拥有的,但它不是很优雅,我不确定它特别有效。
SELECT COUNT(1) AS [CountOfEvents],
DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime))) AS [Month]
FROM [Event]
GROUP BY DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime)))
更好的效率或优雅的建议?
答案 0 :(得分:10)
这个楼层到月份:
select dateadd(month,datediff(m,0,GETDATE()),0);
输出:
-----------------------
2009-10-01 00:00:00.000
(1 row(s) affected)
所以试试这个:
SELECT
COUNT(*) as CountOF
,dateadd(month,datediff(m,0,EventTime),0)
FROM [Event]
GROUP BY dateadd(month,datediff(m,0,EventTime),0)
ORDER BY 2
答案 1 :(得分:1)
SELECT
COUNT(1) AS [CountOfEvents],
DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0) AS [Month]
FROM [Event]
GROUP BY DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0)
答案 2 :(得分:0)
您可以使用MONTH(GetDate())
T-SQL函数。
你还试图从日期时间开始抽出时间吗?
如果是这样,试试这个:
DATEADD(d, DATEDIFF(d, 0, GetDate()), 0)
它更清洁,更具可读性。
答案 3 :(得分:0)
可能更具“可读性”:
SELECT
COUNT(1) AS [CountOfEvents],
CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime) AS [Month]
FROM [Event]
GROUP BY CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime)