在SQL中采用每小时平均值

And*_*rew 7 t-sql ssms average

我有一个包含2个字段的SQL表:TimeStamp和Value.以下是一些数据的摘录.

2005-02-17 13:31:00     2
2005-02-17 13:46:00     3
2005-02-17 14:01:00     1.7
2005-02-17 14:16:00     2.3
2005-02-17 14:31:00     2
2005-02-17 14:46:00     2.5
2005-02-17 15:01:00     2.2
2005-02-17 15:16:00     2.4
2005-02-17 15:31:00     2.6
2005-02-17 15:46:00     2.6
2005-02-17 16:01:00     2.7
Run Code Online (Sandbox Code Playgroud)

我试图按时间平均值列值,但我似乎无法正常工作.最终输出将显示TimeStamp的起始小时,以及Value列的平均值.

对于最终输出,我希望得到一个完整的时间戳,而不仅仅是小时.所以从2005-02-17的14:00到14:59,产生的结果将是:

2005-02-17 14:00:00    2.125
Run Code Online (Sandbox Code Playgroud)

Joh*_*wey 5

select Time_Stamp_Hour=dateadd(hh,datepart(hh,Time_Stamp), cast(CAST(Time_Stamp as date) as datetime))
, AvgValue=AVG(Value)
from ValueLog
group by dateadd(hh,datepart(hh,Time_Stamp), cast(CAST(Time_Stamp as date) as datetime))
Run Code Online (Sandbox Code Playgroud)

结果:

Time_Stamp_Hour         AvgValue
----------------------- ----------------------
2005-02-17 13:00:00.000 2.5
2005-02-17 14:00:00.000 2.125
2005-02-17 15:00:00.000 2.45
2005-02-17 16:00:00.000 2.7
Run Code Online (Sandbox Code Playgroud)

兼容性:SQL Server 2008+


pet*_*ete 5

我会这样做:

SELECT      CAST(FLOOR(CAST(timestamp AS float)) AS datetime) AS day --strip time
            , DATEPART(hh, timestamp) AS hour
            , AVG(value) AS average
FROM        times
GROUP BY    CAST(FLOOR(CAST(timestamp AS float)) AS datetime)
            , DATEPART(hh, timestamp)
Run Code Online (Sandbox Code Playgroud)

小提琴的例子。