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