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)
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+
我会这样做:
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)
小提琴的例子。