获取postgresql查询中每条记录的倒数第二行

Get second last row for every record in postgresql query

我有 table 让我们说 table_inventory。在 table_inventory 上,我为股票的每次更新设置一个触发器,在 audit_inventory table:

中插入新行

table 列如下所示:

table_inventory

|sr_id|inventory_id|p_name|库存|

audit_inventory

|insert_time||sr_id|inventory_id|p_name|库存|

现在我的问题是 table_inventory 的每个 inventory_id 在 audit_inventory[=36 中有多个条目=] 当我为每次股票更新设置触发器时,在 audit_inventory 中插入一行随时间变化的行,所以我想 select 每个 [=] 的倒数第二个股票值table_inventory 的 48=]。我写了一些 cte 来做到这一点,但无法获得每个 inventory_id.

 WITH CTE as
    (select inventory_id,stock from table_inventory),
cte_1 as(
      SELECT
        stock,
        row_number() over (order by insert_time desc) rn
      FROM audit_inventory where inventoryid in (select inventory_id from cte)
    ),cte_2 as(
    SELECT stock
    FROM CTE
    WHERE rn = 2)
select * from cte,cte_1;

上面的查询返回单个 inventory_id 的倒数第二个值,但不明白如何编写查询以获取 [=43 的每个 inventory_id 的倒数第二行值=].

感谢您抽出宝贵时间。

尝试这样做。我想这就是你想要的:

WITH CTE as
( SELECT
        stock,
        inventory_id,
        row_number() over (PARTITION BY inventoryid order by insert_time desc) rn
  FROM audit.inventory 
)

SELECT
    CTE.stock,
    ti.inventory_id,
    ti.stock
FROM
    table_inventory ti
    inner join CTE on CTE.inventory_id=ti.inventory_id
WHERE
     CTE.rn=2