T-SQL在过去24小时内为每小时创建一个数据点

时间:2015-06-05 16:23:09

标签: sql-server tsql aggregate

请问我们怎么做:

1)从当前时间24小时开始每小时生成24行

2)在过去24小时内将另一个表中的数据汇总到这24个数据点中。

我已经看到了建议0-23号码表的解决方案,但是如果我们需要从现在开始,然后24小时跑回Get every hour for a time range

,这些可能会很困难。 例如[早上5点,凌晨4点,凌晨3点... 12点,上午11点,上午7点至凌晨6点)

来源表:

select d,h,count(1)cnt from msgs 
where dt>= DateAdd(hh, -24, sysdatetime()) 
group by d,h order by 1 desc,2 desc

样本数据

d           h   cnt
2015-06-05  16  11
2015-06-05  13  44
2015-06-05  12  16
2015-06-05  11  31
2015-06-05  10  10
2015-06-05  9   12
2015-06-05  8   1
2015-06-04  21  1
2015-06-04  20  2
2015-06-04  18  5
2015-06-04  16  2

我错过了几个小时,我需要一个用0

填写缺失时间的查询

2 个答案:

答案 0 :(得分:2)

作为替代解决方案,您可以使用此查询提供所有24小时范围。然后简单地将这些值与原始查询进行聚合和求和,以仅返回24行。

;WITH hrs AS
(
    SELECT h = 1
    UNION ALL
    SELECT h + 1
    FROM hrs
    WHERE h + 1 <= 24
)
SELECT 
    d = left(convert(varchar(50),DateAdd(hour, -1 * h, getdate()), 21),10), 
    h = DatePart(hour, DateAdd(hour, -1 * h, getdate())), 
    cnt = 0
FROM hrs

答案 1 :(得分:1)

您可以尝试加入此功能:

git commit -regex ".*my_file.*"`