您可以查询
我的数据如下:
acccount_id | value | timestamp
-------------------------------
a12 | 122 | jan 1
a13 | 133 | jan 1
a14 | 443 | jan 1
a12 | 251 | jan 2
a13 | 122 | jan 2
a14 | 331 | jan 2
a12 | 412 | jan 3
a13 | 323 | jan 3
a14 | 432 | jan 3
我想获取每个帐户过去几天的平均值。
acccount_id | value | timestamp | Average
-----------------------------------------
a12 | 122 | jan 1 | 122
a13 | 133 | jan 1 | 133
a14 | 443 | jan 1 | 443
a12 | 251 | jan 2 | 188.5
a13 | 122 | jan 2 | 222.5
a14 | 331 | jan 2 | 387
a12 | 412 | jan 3 | 261.6
a13 | 323 | jan 3 | 192.6
a14 | 432 | jan 3 | 402
我不是Postgres的专业人士,但我一直在研究window functions,这似乎是行之有效的方法,但我无法使其正常工作。我显然也愿意接受更好的选择。
要获得更多背景知识,我实际上每天都会生成新值,并具有一个lambda函数来计算它们。因此,将在不存在值的地方追加一条语句正是我要执行的操作。
答案 0 :(得分:4)
您想要一个运行平均值,并且确实是使用窗口函数来完成的。当您向集合的分区定义提供ORDER BY
时,您将获得运行平均值
select account_id, value, "timestamp",
avg(value) over (partition by account_id order by "timestamp") as average
from the_table
order by account_id, "timestamp";