0

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

这是一个只有一个帐户的示例数据集(会有多个)。

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)

但是,这只对最后两行(包括当前行)有效,如果我每个月都有一个唯一值,但如前所述,情况并非如此。我对任何类型的排名解决方案或嵌套分区持开放态度。任何帮助是极大的赞赏。

4

1 回答 1

2

由于平均值只是 sum() / count(),因此您只需按月分组,但得到 sum() 和 count()。然后使用您的滞后将 3 个月的总和除以 3 个月的计数总和。您是正确的,平均值不正确,但是如果您进行总和并进行计数,则一切正常。

于 2020-12-09T06:37:22.183 回答