获得平均值

时间:2020-02-20 07:55:52

标签: sql postgresql lambda

您可以查询

我的数据如下:

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函数来计算它们。因此,将在不存在值的地方追加一条语句正是我要执行的操作。

1 个答案:

答案 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";