如何在sql中使用每n行(例如第24,48和72)计算移动平均值?



这是我数据库的截图,我想在准确的小时内计算过去三天的平均能耗。因此,如果我在24.10.2016有消费。10h,我想在同一时间添加过去三天平均消耗量的列,因此为 23.10.2016。10h, 22.10.2016.10h和21.10.2016。10小时。我的记录每小时测量一次,所以为了计算这个平均值,我必须查看每 24 行并且没有找到任何方法。如何修改查询以获得所需的内容:

select avg(consumption) over (order by entry_date rows between 72
preceding and 24 preceding) from my_data;

还是有其他方法?

也许试试这个:

select entry_date, EXTRACT(HOUR FROM entry_date),
avg(consumption) over (PARTITION BY EXTRACT(HOUR FROM entry_date) 
order by entry_date rows between 72 preceding and 24 preceding) 
from my_data;

您可以使用RANGE BETWEEN INTERVAL '72' HOUR PRECEDING AND INTERVAL '24' HOUR PRECEDING而不是ROWS.这包括有间隙或重复时间值的情况。

我认为你可以通过使用过滤器以另一种方式做到这一点。

Select avg(consumption) from my_data
where 
entry_date between @StartDate and @EndDate
and datepart(HOUR, entry_date)=@hour

如果你在MySQL上

Select avg(consumption) from my_data
where 
entry_date between @StartDate and @EndDate
and HOUR(entry_date)=@hour

相关内容

  • 没有找到相关文章

最新更新