SQL:按时间块汇总日期数据

时间:2013-08-28 03:30:04

标签: sql datetime

我有一个信息数据集,可以在事件发生时记录事件;我希望能够在白天的不同时间段汇总这些数据。 我的RAW数据只是用事件的系统时间标记时间戳。 我有一个SQL查询,可以计算一小时内发生的事件数。

三天内的示例或RAW数据,

Time_Period             Count
------------------------------  
29/07/13 08:00:00       2  
29/07/13 09:00:00       19  
29/07/13 10:00:00       21  
29/07/13 11:00:00       30  
29/07/13 12:00:00       21  
29/07/13 13:00:00       24  
29/07/13 14:00:00       18  
29/07/13 15:00:00       35  
29/07/13 16:00:00       17  
29/07/13 17:00:00       3  
30/07/13 09:00:00       20  
30/07/13 10:00:00       47  
30/07/13 11:00:00       22  
30/07/13 12:00:00       19  
30/07/13 13:00:00       26  
30/07/13 14:00:00       30  
30/07/13 15:00:00       20  
30/07/13 16:00:00       26  
30/07/13 17:00:00       10  
30/07/13 18:00:00       1  
31/07/13 08:00:00       1  
31/07/13 09:00:00       23  
31/07/13 10:00:00       28  
31/07/13 11:00:00       18  
31/07/13 12:00:00       25  
31/07/13 13:00:00       17  
31/07/13 14:00:00       17  
31/07/13 15:00:00       36  
31/07/13 16:00:00       22  
31/07/13 17:00:00       8  
31/07/13 20:00:00       1 

然而,我想要实现的是获取此数据并将其概括为忽略字段的日期部分(不是时间,就像其他人想要的那样)

我会得到一个看起来像这样的结果。 (上述3天)

Time_Period   Sum_Count
-----------------------
08:00:00        23  
09:00:00        89  
10:00:00        71  
11:00:00        67  
12:00:00        72  
13:00:00        71  
14:00:00        55  
15:00:00        97    
16:00:00        49    
17:00:00        12    
18:00:00        1   

我可以在代码中执行此操作并将答案转储回临时表;但是,在SQL中正确地执行此操作会使从不同系统调用更容易。

2 个答案:

答案 0 :(得分:1)

SELECT
    HourMinuteSecond=CONVERT(TIME,YOURDATE),
    GroupCount=COUNT(*)
FROM 
   YOURTABLE
GROUP BY CONVERT(TIME,YOURDATE)

答案 1 :(得分:0)

简单如下:

select count(*),
convert(sysname,DATEPART(HOUR,Time_Period ))+':'+
convert(sysname,DATEPART(minute,Time_Period ))+':'+
convert(sysname,datepart(second,Time_Period ))
from YourTable
group by 
convert(sysname,DATEPART(HOUR,Time_Period ))+':'+
convert(sysname,DATEPART(minute,Time_Period ))+':'+
convert(sysname,datepart(second,Time_Period ))

如果您使用SQL2012,则可以使用 TIMEFROMPARTS 功能构建强类型时间。如果您使用早期版本,请在上面的示例中对齐字符串并添加 ORDER BY 子句