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

MYSQL多对多表按UserId去重并保留最新记录的实现问题

解决方案

方法1:窗口函数(兼容MySQL 8.0+/PostgreSQL/SQL Server等所有主流新版数据库)

这是最通用、易维护的实现方式,通过排序编号直接筛选每个用户的最新记录:

SELECT UserId, DomicilioId, FechaCambio, Observaciones
FROM (
    SELECT 
        *,
        -- 按用户ID分组,组内按变更时间倒序排序
        ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY FechaCambio DESC) AS rn
    FROM 你的实际表名
) t
-- 取每个用户排序后的第一条(最新记录)
WHERE rn = 1;

如果存在同一个用户同一时间有多条变更记录的场景,可以将ROW_NUMBER()替换为RANK(),或额外增加排序条件适配业务规则。

方法2:关联子查询(兼容低版本数据库,如MySQL 5.x)

如果你的数据库不支持窗口函数,可以先统计每个用户的最新变更时间,再关联回原表取完整记录:

SELECT t1.*
FROM 你的实际表名 t1
INNER JOIN (
    -- 先取每个用户的最新变更时间
    SELECT UserId, MAX(FechaCambio) AS max_fecha
    FROM 你的实际表名
    GROUP BY UserId
) t2 ON t1.UserId = t2.UserId AND t1.FechaCambio = t2.max_fecha;

注意该方法如果同一个用户存在多条完全相同FechaCambio的记录,会全部返回,可根据业务需求补充额外去重条件。

方法3:直接删除表内重复记录,仅保留最新数据

如果你的需求是直接对原表做数据清理,而非仅查询结果,可以使用如下写法(以MySQL为例):

DELETE t1
FROM 你的实际表名 t1
JOIN 你的实际表名 t2 
  ON t1.UserId = t2.UserId 
  -- 删除同一个用户中变更时间早于最新时间的所有记录
  AND t1.FechaCambio < t2.FechaCambio;

内容的提问来源于stack exchange,提问作者Francisco Jarma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:39:04