SQL Server组通过计算DateTime每小时?

create table #Events ( EventID int identity primary key, StartDate datetime not null, EndDate datetime not null ) go insert into #Events (StartDate, EndDate) select '2007-01-01 12:44:12 AM', '2007-01-01 12:45:34 AM' union all select '2007-01-01 12:45:12 AM', '2007-01-01 12:46:34 AM' union all select '2007-01-01 12:46:12 AM', '2007-01-01 12:47:34 AM' union all select '2007-01-02 5:01:08 AM', '2007-01-02 5:05:37 AM' union all select '2007-01-02 5:50:08 AM', '2007-01-02 5:55:59 AM' union all select '2007-01-03 4:34:12 AM', '2007-01-03 4:55:18 AM' union all select '2007-01-07 3:12:23 AM', '2007-01-07 3:52:25 AM' 

(道歉为http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server收获他们的基本的SQL)

我试图find在一个小时内发生的事件的计数,所以结果集看起来像这样:

 2007-01-01 12:00 3 2007-01-02 5:00 2 2007-01-03 4:00 1 2007-01-07 3:00 1 

我一直玩dateadd和圆,分组,但没有得到它。 谁能帮忙?

谢谢。

这个怎么样? 假设SQL Server 2008:

 SELECT CAST(StartDate as date) AS ForDate, DATEPART(hour,StartDate) AS OnHour, COUNT(*) AS Totals FROM #Events GROUP BY CAST(StartDate as date), DATEPART(hour,StartDate) 

对于2008年以前:

 SELECT DATEADD(day,datediff(day,0,StartDate),0) AS ForDate, DATEPART(hour,StartDate) AS OnHour, COUNT(*) AS Totals FROM #Events GROUP BY CAST(StartDate as date), DATEPART(hour,StartDate) 

这导致:

 ForDate | OnHour | Totals ----------------------------------------- 2011-08-09 00:00:00.000 12 3 

或者,只需GROUP BY小时和分钟:

 SELECT CAST(Startdate as DATE) as 'StartDate', CAST(DATEPART(Hour, StartDate) as varchar) + ':00' as 'Hour', COUNT(*) as 'Ct' FROM #Events GROUP BY CAST(Startdate as DATE), DATEPART(Hour, StartDate) ORDER BY CAST(Startdate as DATE) ASC 

输出:

 StartDate Hour Ct 2007-01-01 0:00 3 2007-01-02 5:00 2 2007-01-03 4:00 1 2007-01-07 3:00 1 

我在其他地方发现了这个 我喜欢这个答案!

 SELECT [Hourly], COUNT(*) as [Count] FROM (SELECT dateadd(hh, datediff(hh, '20010101', [date_created]), '20010101') as [Hourly] FROM table) idat GROUP BY [Hourly]