【发布时间】:2019-09-19 19:43:23
【问题描述】:
我有一张如下表
id | x | y | value
------+--------+-------+------------
1 | 1 | 1 | 25
1 | 1 | 2 | 42
1 | 2 | 3 | 98
1 | 2 | 4 | 54
1 | 3 | 5 | 67
2 | 1 | 1 | 78
2 | 1 | 2 | 45
2 | 2 | 3 | 96
我必须按 id 对它进行分组,同时保持 id、x 和 y 的顺序(按各自的顺序),并计算前 n 行的滚动平均值。例如,如果 n = 3
id | x | y | value | rollingAvg
------+--------+-------+--------+-----------
1 | 1 | 1 | 25 | 25
1 | 1 | 2 | 42 | (25 / 1) = 25
1 | 2 | 3 | 98 | (25+42/2) = 33.5
1 | 2 | 4 | 54 | (25+42+98 /3) = 55
1 | 3 | 5 | 67 | (42+98+54 /3) = 64.67
2 | 1 | 1 | 78 | 78
2 | 1 | 2 | 45 | (78/1) = 78
2 | 2 | 3 | 96 | (78+45 / 2) = 61.5
逻辑是
1) 如果按id分组时为第1行,则取平均值
2) 平均值不应包含当前行
提前致谢
【问题讨论】:
标签: sql postgresql rolling-computation