我在 PostgreSQL 数据库中有下表
id | value_1 | value_2
-----------------------------
1 | 100 | 10
1 | NULL | 20
2 | 100 | 20
3 | 100 | 12
4 | 100 | 16
5 | NULL | 200
5 | 400 | 200
5 | 580 | 200
我想保留具有给定最大值的记录value_1
并删除所有其他重复的记录(具有相同的id
),以便查询将表减少到:
id | value_1 | value_2
-----------------------------
1 | 100 | 10
2 | 100 | 20
3 | 100 | 12
4 | 100 | 16
5 | 580 | 200
这可以使用 PostgreSQL 的(专有)
distinct on ()
运算符轻松完成:假设:
DELETE
从表中实际复制。id
被定义NOT NULL
。value_1
每个 distinct至少有一个 not-nullid
。在这种情况下,索引
(id)
甚至(id, value_1)
会有所帮助。有关的:清理后,
UNIQUE
索引(id)
会保持这种状态。(加上制作它NOT NULL
。)如果我的任何假设不成立(更具体!),可能需要一个不同的解决方案。