【问题标题】:Calculate hourly average of values in a time interval计算时间间隔内的每小时平均值
【发布时间】:2014-12-11 11:10:42
【问题描述】:

我不是一个真正的 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
....
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

【问题讨论】:

标签: sql sql-server


【解决方案1】:

你可以使用datenamedatepartgroup by

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]) 

【讨论】:

    【解决方案2】:

    下面是一个通用聚合查询示例,您可以使用它按时间间隔进行分组。

    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;
    

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多