我现有的数据库包含id,值和时间的数据。每3秒就有一条记录。我希望我的select
语句使用这些数据并根据id和hrly对它们进行分组,以显示该hr中的值的平均值。如何使用group by
来实现此目标?
这是我的样本数据:
id value date time
a 5 5/18/2015 10:27:22
a 9 5/18/2015 10:27:25
b 7 5/18/2015 10:27:22
b 8 5/18/2015 10:27:22
我每隔3秒就有一次数据。我希望它基于每天的每小时进行聚合,以反映该hr中该id的平均值。 我希望输出看起来像
id -a , gives avg of 7 , at 10 on 5/18/2015
答案 0 :(得分:2)
这是一个相对简单的组,通常会有两种类型的列。您的分组列和聚合。在这种情况下,您的分组列将具有ID,日期和小时(根据[时间]计算)。在这种情况下,您只有一个聚合列:值的平均值。看看我的代码:
SELECT ID,
[date],
DATEPART(HOUR,[time]) AS hr,
AVG(value) AS avg_val
FROM yourTable
GROUP BY ID,[date],DATEPART(HOUR,[time])
答案 1 :(得分:-1)
此查询将提取每个ID以及平均值,按一天中的每个小时分组。如果你想运行这个超过1天,你必须按日期+小时分组,所以6/19/2015 10:00,然后6/19/2015 11:00等等。
SELECT
id,
avg(value) AS avg_val,
datepart(hh, time_interval) AS time_interval
FROM my_table
WHERE time_interval = '6/19/2015'
GROUP BY id, datepart(hh, time_interval)
要包含多天,您可以将按组更改分组:
GROUP BY id,convert(varchar(10),time_interval,120),datepart(hh,time_interval)