Postgresql 使用Postgres中GROUP BY查询中前一行的值更新行

Postgresql 使用Postgres中GROUP BY查询中前一行的值更新行,postgresql,window-functions,Postgresql,Window Functions,假设我有一张这样的桌子: account_id date value 1 1/1/2015 5 1 1/3/2015 7 1 1/7/2015 8 3 1/2/2015 4 如果我想按日期进行订单,按帐户id分组,并用前一行的值更新每一行,该怎么办 因此,最终结果应该是: account_id date value prev_value 1 1/1/2015

假设我有一张这样的桌子:

account_id  date      value
1           1/1/2015  5
1           1/3/2015  7
1           1/7/2015  8
3           1/2/2015  4
如果我想按日期进行订单,按帐户id分组,并用前一行的值更新每一行,该怎么办

因此,最终结果应该是:

account_id  date      value  prev_value
1           1/1/2015  5     null
1           1/3/2015  7     5
1           1/7/2015  8     7
3           1/2/2015  4     null
在单个查询中有什么好方法可以做到这一点吗?

窗口函数可以为您做到这一点,它基本上是:

返回在该值前面的偏移量行处计算的值 分区内的当前行;如果没有这样的争吵,那么改为 返回默认值(必须与值的类型相同)。两者抵消 和默认值是相对于当前行计算的。如果省略, 偏移量默认为1,默认为null

结果:

 account_id |   date   | value | prev_value 
------------+----------+-------+------------
          1 | 1/1/2015 |     5 |           
          1 | 1/3/2015 |     7 |          5
          1 | 1/7/2015 |     8 |          7
          3 | 1/2/2015 |     4 |           
(4 rows)
 account_id |   date   | value | prev_value 
------------+----------+-------+------------
          1 | 1/1/2015 |     5 |           
          1 | 1/3/2015 |     7 |          5
          1 | 1/7/2015 |     8 |          7
          3 | 1/2/2015 |     4 |           
(4 rows)