微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用条件删除 postgresql 中的重复行?

如何解决如何使用条件删除 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 签署日期 客户 ID 订单代码 updated_at
A 2021/01/01 001 AB 2020/01/02
A 2021/01/01 001 AB 2020/01/03
A 2021/01/01 001 AB 2020/01/12
B 2021/01/03 002 LL 2020/02/02
B 2021/01/03 002 LL 2020/02/03
B 2020/01/03 002 LL 2020/02/04

想要的结果:

ID 签署日期 客户 ID 订单代码 updated_at
A 2021/01/01 001 AB 2020/01/12
B 2020/01/03 002 LL 2020/02/04

解决方法

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

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;

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。