【发布时间】:2021-01-12 05:41:47
【问题描述】:
我想删除条件为更新日期小于最大更新日期的重复行。但是,我无法删除它们。
我的尝试:
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 | Sign Date | Customer id | order code | 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 | Sign Date | Customer id | order code | updated_at |
|---|---|---|---|---|
| A | 2021/01/01 | 001 | AB | 2020/01/12 |
| B | 2020/01/03 | 002 | LL | 2020/02/04 |
【问题讨论】:
-
根据 OP 的描述,好像 OP 已经得到了你需要的数据?如果这是真的,那么只需将其插入新表然后删除旧表。
-
PARTITION BY order_code, customer_id, id, sign_date-->PARTITION BY id -
与您的问题无关,但是:Postgres 9.1 是no longer supported,您应该尽快计划升级。
标签: sql postgresql validation postgresql-9.1