按声明分组做平均时间

时间:2015-06-18 20:26:18

标签: sql group-by

我现有的数据库包含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

2 个答案:

答案 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)