Postgres SELECT id LAG(id) OVER(ORDER BY id)FROM invoice WHERE id = 2

Postgres SELECT id LAG(id) OVER (ORDER BY id) FROM invoice WHERE id = 2

我在整个 Internet 上都看过了,但未能按预期获得此查询 运行。 我有一张 table 的发票,有些发票相互关联,因为它们属于同一个项目。

我的票说我必须根据提供的发票获得上一张发票。 假设项目 A 有 10 张发票,我正在查看发票 #4,我必须编写一个查询,该查询将 return 上一张发票的 ID。请记住,发票 table 是各种项目的所在地,每个项目都可以有很多自己的发票,所以我想避免取回许多 ID 然后对它们进行迭代。

为了说明这个问题,我写了这个fiddle。 当我不针对 steps.id 进行过滤时,它的工作方式在某种程度上是可以接受的,但这意味着 return 要筛选数百个 ID。 我试了又试,但似乎无法将 previousStep 列绑定到 ID 列。

只需为相同的 project 找到下一个最大 id 的发票:

SELECT inv2.id
FROM invoice AS inv1
   JOIN invoice AS inv2
      ON inv1.project = inv2.project AND inv1.id > inv2.id
WHERE inv1.id = 1057638
ORDER BY inv2.id DESC
LIMIT 1;