Sql 计算时间间隔内每小时值的平均值
我不是一个真正的sql专家,所以我想做的可能很简单,但我找不到一个简单的解决方案 我有一系列的每小时数据,在两个日期之间。大概是这样的:Sql 计算时间间隔内每小时值的平均值,sql,sql-server,Sql,Sql Server,我不是一个真正的sql专家,所以我想做的可能很简单,但我找不到一个简单的解决方案 我有一系列的每小时数据,在两个日期之间。大概是这样的: DATETIME VALUE ------------------------- 2014-01-01 01:00 104 2014-01-01 02:00 56 ... 2014-01-04 23:00 65 2014-01-05 00:00 145 01:00 67.65 02:00 43.00
DATETIME VALUE
-------------------------
2014-01-01 01:00 104
2014-01-01 02:00 56
...
2014-01-04 23:00 65
2014-01-05 00:00 145
01:00 67.65
02:00 43.00
....
00:00 89.45
我想要的是,对于每一小时,得到该小时每天的平均值,因此我用如下方式结束查询:
DATETIME VALUE
-------------------------
2014-01-01 01:00 104
2014-01-01 02:00 56
...
2014-01-04 23:00 65
2014-01-05 00:00 145
01:00 67.65
02:00 43.00
....
00:00 89.45
“01:00”值将是每天所有“01:00”值的平均值,依此类推
算法很简单,但我的SQL技能很弱:-)
奖金
如果答案包括同一个问题的一个变体,那就太棒了:按工作日和小时计算平均值,而不仅仅是按小时:
Monday 01:00 34.23
Monday 02:00 54.34
...
Monday 23:00 241.34
Tuesday 00:00 89.43
....
Sunday 23:00 49.33
您可以使用
datename
、datepart
和groupby
select datename(weekday, [datetime]) as [Day],
datepart(hour, [datetime]) as [Hour],
avg(value) as AvgValue,
datepart(weekday, [datetime]) as [DayNo]
from table1
group by datename(weekday, [datetime]), datepart(weekday, [datetime]),
datepart(hour, [datetime])
order by datepart(weekday, [datetime]), datepart(hour, [datetime])
下面是一个可用于按时间间隔分组的常规聚合查询示例
WITH intervals AS (
SELECT DATEADD(hour, DATEDIFF(hour, '', DATETIME), '') AS TimeInterval
,VALUE
FROM dbo.Foo
)
SELECT
TimeInterval
, DATENAME(weekday, TimeInterval) AS Weekday
, CAST(TimeInterval AS time)
, AVG(VALUE) AS AvgValue
FROM intervals
GROUP BY TimeInterval
ORDER BY TimeInterval;
你熟悉这个条款吗?