平均值在特定日期范围内?

时间:2016-04-27 16:27:43

标签: sql sql-server tsql sql-server-2012

我正在编写一个查询,该查询应该采用属于特定日期时间范围的值并吐出它们的平均值。但是,我遇到了一些小问题。

基本上,我有一个大型数据集,它有30多天的多个不同数据子集。我需要弄清楚如何平均从早上9点到9点的2天内的值。

我的数据集示例:

Device1     Values      TimeFrame
---------------------------------------------------------           
Device1     Value1      2016-03-27 00:03:11.000 0.0019
Device1     Value2      2016-03-27 00:03:11.000 18.7041
Device1     Value3      2016-03-27 00:03:11.000 49.5902
Device1     Value1      2016-03-27 00:08:06.000 0.0019
Device1     Value2      2016-03-27 00:08:06.000 18.7041
Device1     Value3      2016-03-27 00:08:06.000 49.5902
Device1     Value1      2016-03-27 00:13:09.000 0.0019
Device1     Value2      2016-03-27 00:13:09.000 18.7041
Device1     Value3      2016-03-27 00:13:09.000 49.5902
Device1     Value1      2016-03-28 00:03:11.000 0.0019
Device1     Value2      2016-03-28 00:03:11.000 18.7041
Device1     Value3      2016-03-28 00:03:11.000 49.5902
Device1     Value1      2016-03-28 00:08:06.000 0.0019
Device1     Value2      2016-03-28 00:08:06.000 18.7041
Device1     Value3      2016-03-28 00:08:06.000 49.5902
Device1     Value1      2016-03-28 00:13:09.000 0.0019
Device1     Value2      2016-03-28 00:13:09.000 18.7041
Device1     Value3      2016-03-28 00:13:09.000 49.5902

我需要计算每一天每个值的平均值,但假设当天上午9点开始,第二天上午9点结束。这有点不稳定。我不太确定从哪里开始。

1 个答案:

答案 0 :(得分:4)

您可以通过减去9小时并使用group by

来完成此操作
select cast(dateadd(hour, -9, timeframe) as date) as thedate,
       count(*) as num, avg(value) as avg_value
from dataset t
group by cast(dateadd(hour, -9, timeframe) as date)
order by thedate;
相关问题