一个 Postgres 查询,用下一行中的值减去一行中的值

问题描述

我有一张像(mytable)这样的桌子:

id | value
=========
1 | 4
2 | 5
3 | 8
4 | 16
5 | 8
...

我需要一个查询,让我在每一行减去下一行:

id | value | diff
=================
1 | 4 | 4 (4-Null)
2 | 5 | 1 (5-4)
3 | 8 | 3 (8-5)
4 | 16 | 8 (16-8)
5 | 8  | -8 (8-16)
...

现在我使用 python 脚本来执行此操作,但我想如果我从该表创建视图会更快。

解决方法

在这种情况下,您应该使用 window functions - LAG()

SELECT id,value,value - LAG(value,1) OVER (ORDER BY id) AS diff
FROM mytable
ORDER BY id;