You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中按条件删除表行 每个mainConId仅保留最高相似度CMax条

实现方案

我们可以用PostgreSQL窗口函数ROW_NUMBER()对分组内的记录做排名后删除冗余行,具体语句如下:

核心删除语句

将语句中的CMax替换为你需要为每个mainConId保留的最大记录条数即可执行:

WITH ranked_relations AS (
    SELECT 
        ctid,
        ROW_NUMBER() OVER (
            PARTITION BY mainConId 
            ORDER BY similarity DESC, relatedConAddedOn DESC
        ) AS rank_num
    FROM content_relations
)
DELETE FROM content_relations
WHERE ctid IN (SELECT ctid FROM ranked_relations WHERE rank_num > CMax);

排序规则说明:同分组内相似度一致时,默认优先保留添加时间最新的关联内容,你可根据业务需求调整ORDER BY后的次排序规则

前置校验语句

执行删除前建议先运行如下语句预览待删除的记录,避免误操作:

WITH ranked_relations AS (
    SELECT 
        mainConId,
        relatedConId,
        similarity,
        relatedConAddedOn,
        ROW_NUMBER() OVER (
            PARTITION BY mainConId 
            ORDER BY similarity DESC, relatedConAddedOn DESC
        ) AS rank_num
    FROM content_relations
)
SELECT * FROM ranked_relations WHERE rank_num > CMax;

性能优化建议

如果表数据量较大,建议提前建立mainConId + similarity的联合索引,可大幅降低分组排序和删除的执行耗时。

内容的提问来源于stack exchange,提问作者Deepak Kapiswe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:00:07