3个月滚动平均数,缺失月份



我一直在阅读这里的相关问题,到目前为止,解决方案要求没有遗漏的月份。如果错过了几个月,我想得到一些帮助吗?

例如,我想计算每个项目订单的3个月滚动平均数。如果某个项目缺少一个月,则计算假定该项目当月的订单数为0。如果剩下不到三个月的时间,滚动平均数就不那么重要了(它可以是空的,也可以是其他的(。

MONTH   | ITEM | ORDERS | ROLLING_AVG
2021-04 | A    | 5      |  3.33
2021-04 | B    | 4      |  3
2021-03 | A    | 3      |  1.66
2021-03 | B    | 5      |  null
2021-02 | A    | 2      |  null
2021-01 | B    | 2      |  null

非常感谢!

此外,是否有一种方法";添加";缺少的月份行,而不使用与项目列表的交叉联接?例如,如果我有1000万个项目,那么交叉联接需要相当长的时间才能执行。

您可以使用range窗口框架和一些条件逻辑:

select t.*,
(case when min(month) over (partition by item) <= month - interval '2 month'
then sum(orders) over (partition by item
order by month
range between interval '2 month' preceding and current row
) / 3.0
end) as rolling_average
from t;

这里有一个db<gt;不停摆弄结果与你的问题略有不同,因为2021-03年A没有足够的信息,但2021-03的B有足够的信息。

最新更新