如何删除postgresql中有条件的重复行



我想删除条件是更新日期小于最大更新日期的重复行。然而,我无法删除它们。

我的尝试:

SELECT * FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY order_code, customer_id, id, sign_date ORDER BY updated_at DESC) AS Row
FROM fulfillment_bill_transactions WHERE active =1 AND transaction_type= 2
) dups
WHERE
dups.Row > 1

我的查询结果显示了具有最短更新日期的行,但除了最长日期之外,没有显示所有更新日期。

以下是示例:

表A:

客户ID订单代码AB2020/01/03AB2020/01/12002LL002LL
ID签署日期更新日期
A2021/01/01AB2020/01/02
A2021/01/01001
A2021/01/01001
B2021/01/032020/02/02
B2021/01/032020/02/03
B2020/01/03

如果您想删除除最高更新日期之外的所有重复行,则可以使用以下查询:

delete FROM fulfillment_bill_transactions t 
WHERE exists (select 1 from fulfillment_bill_transactions tt
where tt.id = t.id
AND tt.updated_date > t.updated_date);

在Postgres中,如果您希望每组一行,那么我建议使用distinct on。对于您提供的样本数据,这将是:

select distinct on (id) fbt.*
from fulfillment_bill_transactions fbt
order by id, date desc;

目前尚不清楚您的代码与该问题有什么关系。它指的是样本数据中没有的列,问题中没有描述过滤条件。

最新更新