[英]3 month rolling average with missing months
我一直在這里閱讀相關問題,到目前為止,解決方案要求沒有丟失的月份。 如果缺少幾個月,我想得到一些幫助嗎?
例如,我想計算每件商品的 3 個月滾動平均值。 如果某個項目缺少月份,則計算假定該項目該月的訂單數量為 0。如果剩下的時間少於三個月,則滾動平均值並不那么重要(它可以是 null 或否則)。
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
window 框架——以及一些條件邏輯:
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<>fiddle。 結果與您的問題略有不同,因為 2021-03 年 A 的信息不足,但 2021-03 年 B 的信息足夠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.