如果表Event
包含DateTime类型的EventTime
字段,并且该值将同时包含日期和时间元素,则需要创建一个汇总查询统计每个月的事件数量。从任何日期时间获取DateTime的T-SQL代码只包含Month和Year
“分组依据”字段的结果类型还必须是带有0时间元素的日期时间,并设置为月份的第一天。
这是我迄今为止,但它不是很优雅,我不知道它特别有效。
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)))
更好的建议为更多的效率或优雅?
关键是按您感兴趣的单位(在这种情况下是月份)发布,请参阅此链接:http://stackoverflow.com/questions/85373/floor-a-date-in-sql-server/85379# 85379 – 2009-10-01 15:49:16
ORDER BY 2的目的是什么? – AnthonyWJones 2009-10-01 15:51:24
它将按第二列对查询进行排序。当我在我的系统上运行这个查询时,很难检查结果,所以我对它们进行了排序。当我把它粘贴在这里时,我刚刚离开那里。如果你不需要它,请删除。 – 2009-10-01 15:53:45