如果使用 moving 等间隔进行计算

等距间隔的 moving 有没有函数可以支持?就比方说rowNo奇数/偶数位置的moving(间隔为2)

请先 登录 后评论

2 个回答

Polly
需要先将数据分组,然后在组内计算,然后使用 HINT_KEEPORDER 保序返回结果。可以参考下述脚本:
t = table(1..10 as id, 1..10 as v)
select [HINT_KEEPORDER] id, moving(sum, v, 3) from t context by rowNo(v) % 2

请先 登录 后评论
NA

通过 rowNo(col)%N 可以给数据等间隔分 N 组,再通过 context by 分组计算 moving。

t = table(1..10 as id, 1..10 as v)
select id, moving(sum, v, 3) from t context by rowNo(v) % 2

直接 context by 的输出结果会按照分组依次输出,如果需要保持顺序和输入一致,可以用 HINT_KEEPORDER 关键字

t = table(1..10 as id, 1..10 as v)
select [HINT_KEEPORDER] id, moving(sum, v, 3) from t context by rowNo(v) % 2

上述例子中,moving 使用的函数是 sum,有对应的优化过的内置函数 msum。msum 通过增量算法实现了优化,性能会比 moving(sum, X, window) 更好。

如果 moving 使用的函数比较基础的话,可以考虑用对应的内置函数替代,比如

t = table(1..10 as id, 1..10 as v)
select [HINT_KEEPORDER] id, msum(v, 3) from t context by rowNo(v) % 2



请先 登录 后评论