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

How to calculate moving average value using every nth row (e.g. 24th,48th and 72nd) in sql?

Here is the snip of my database 我想精确计算过去三天的平均能耗。因此,如果我在 2016 年 10 月 24 日消费。 10h,我想在同一时间添加过去三天的平均消耗量列,所以对于 2016 年 10 月 23 日。 2016 年 10 月 22 日 10 点。 2016 年 10 月 10 日和 21 日。 10 小时。我的记录每小时测量一次,所以为了计算这个平均值,我必须 每隔 24 行查看一次 并且没有找到任何方法。如何修改我的查询以获得我想要的:

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

或者有其他方法吗?

我认为您可以使用过滤器以另一种方式完成此操作。

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

也许试试这个:

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。这涵盖了存在间隙或重复时间值的情况。