我正在编写一个查询,该查询应该采用属于特定日期时间范围的值并吐出它们的平均值。但是,我遇到了一些小问题。
基本上,我有一个大型数据集,它有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点结束。这有点不稳定。我不太确定从哪里开始。
答案 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;