获取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
我有 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