给定一个表Event
包含了一个名为场EventTime
DateTime类型和值将同时包含日期和时间元素,我需要创造出计算每个月的事件数量汇总查询。
集团通过场产生的类型也必须是日期时间与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)))
对于任何一个更高的效率或优雅更好的建议?
这个楼层的月份:
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
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)
有一个MONTH(GetDate())
T-SQL函数可以使用。
此外,你只是试图剥去日期时间的时间?
如果是的话,试试这个:
DATEADD(d, DATEDIFF(d, 0, GetDate()), 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)