Redshift 中的滚动 N 月平均值,每月有多个条目

Rolling N monthly average in Redshift with multiple entries per month

我想使用 Redshift 的 window 聚合函数来创建一些数据的 'N' 月滚动平均值。每个给定月份的数据将有多个唯一条目。如果可能的话,我想避免在执行滚动平均之前首先在几个月内进行分组和平均,因为这是取平均而不理想的平均值(因为 post 这样做:3 Month Moving Average - Redshift SQL)。

这是一个只有一个账户的示例数据集(会有不止 1 个)。

Quote Date      Account.   Value 
3/24/2015       acme.       3
3/25/2015       acme.       7     
4/1/2015        acme.       12          
4/3/2015        acme.       17         
5/15/2015       acme.       1         
6/30/2015       acme.       3
7/30/2015       acme.       9

这就是我希望 3 个月滚动平均值的结果(例如)。

Quote_Date      Account.   Value  Month 3M_Rolling_Average
3/24/2015       acme.       3        1       3
3/25/2015       acme.       7        1       5
4/1/2015        acme.       12       2       7.33
4/3/2015        acme.       17       2       9.75
5/15/2015       acme.       1        3       8
6/30/2015       acme.       3        4       8.25
7/30/2015       acme.       9        5       4.33

我试过的代码是这样的:

avg(Value) over (partition by Account order by Quote Date rows between 2 preceding and current row)

但是,这只对最后 2 行(包括当前行)起作用,如果我每个月都有一个唯一值,这将起作用,但如上所述,情况并非如此。我对任何类型的排名解决方案或嵌套分区持开放态度。非常感谢任何帮助。

由于平均值只是 sum() / count(),您只需按月分组即可获得 sum() 和 count()。然后用你的滞后来计算 3 个月的总和,然后除以 3 个月的计数总和。你是正确的,平均值的平均值是不正确的,但如果你进行总和和计数,事情就会起作用。