我想根据数据的其他特征对窗口长度变化的字段进行滚动平均。这排除了SQL窗口函数。我以为我可以做的就是编写一个JavaScript UDF以计算窗口大小可变的滚动平均值。但是,滚动窗口将需要窗口大小字段中的值。最好的方法是什么?或者也许我根本不需要JavaScript?
示例:我有一张表someData:
Day Value
1 3.5
2 5
3 7
4 10
5 12
. .
. .
. .
100 15
,我想使用x大小可变的窗口来计算Value的滚动平均值。因此,当x = 2时,我的预期结果将是:
Rolling Average
3.5
4.25
6
8.5
11
.
.
.
更新:
如果我使用固定数字(例如2)而不是变量x,则可以使用窗口函数。问题是我希望数字有所变化,具体取决于例如天。假设我们用
定义x (CASE WHEN MAX(day) > 99 THEN 2 ELSE 3 END) AS x
我意识到问题已经here得到了回答。
我可以简单地做的是:
(CASE WHEN MAX(day) > 99 THEN AVG(value) OVER(ORDER BY day RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)
ELSE AVG(value) OVER(ORDER BY day RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) END)
AS rolling_average