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

SQL查询删除重复行方法:如何删除同支付不同日期的重复记录

SQL删除仅日期字段不同的重复支付记录方案

首先明确业务前提:假设你的支付记录表名为payment_records,用来判定为同一笔支付的唯一标识字段可以是支付流水号、订单号、用户ID+交易金额组合等(可根据实际业务调整),存在差异的日期字段为create_time。

前置验证步骤(必做,避免误删数据)

先执行查询语句确认要删除的重复行,以下示例默认规则为保留日期最新的记录,删除更早的重复记录,如果要保留最早的记录调整排序规则即可:

-- 先查询待删除的重复数据,确认范围无误再执行删除
SELECT * FROM (
    SELECT
        *,
        ROW_NUMBER() OVER(
            PARTITION BY pay_flow_no -- 此处替换为你判定重复的字段,多个用逗号分隔
            ORDER BY create_time DESC -- 倒序后rn=1为要保留的最新记录
        ) AS rn
    FROM payment_records
) t WHERE t.rn > 1;

正式删除操作

方案1:适配MySQL8.0+、PostgreSQL、SQL Server、Oracle等支持窗口函数的数据库

WITH duplicate_data AS (
    SELECT
        *,
        ROW_NUMBER() OVER(
            PARTITION BY pay_flow_no
            ORDER BY create_time DESC
        ) AS rn
    FROM payment_records
)
DELETE FROM duplicate_data WHERE rn > 1;

如果需要保留最早的记录,仅需将ORDER BY create_time DESC改为ORDER BY create_time ASC即可。

方案2:适配MySQL5.x等不支持窗口函数的低版本数据库

DELETE p1
FROM payment_records p1
INNER JOIN payment_records p2
ON p1.pay_flow_no = p2.pay_flow_no -- 重复判定字段匹配
AND p1.create_time < p2.create_time; -- 删除日期更早的重复行

重要提示:执行删除前请先对原表做全量备份,或者开启事务执行删除,验证结果符合预期后再提交事务,避免数据丢失无法恢复。

内容的提问来源于stack exchange,提问作者Leeh Gabech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:01