在 MySQL 中,如果你想删除同一用户的多条记录,只保留最新的一条,可以使用以下方法。

假设你的表名为 users,并且有一个表示用户的列 user_id 和一个表示记录创建时间的列 created_at。

方法一:使用子查询

你可以使用子查询来标识需要保留的记录,然后删除不在子查询中的记录。

DELETE FROM users
WHERE id NOT IN (
    SELECT id FROM (
        SELECT MAX(id) AS id 
        FROM users 
        GROUP BY user_id
    ) AS temp_table
);

方法二:使用 JOIN 语句

可以使用 JOIN 语句来删除不需要的记录。

DELETE u1 FROM users u1
LEFT JOIN (
    SELECT user_id, MAX(created_at) AS max_created_at
    FROM users
    GROUP BY user_id
) u2
ON u1.user_id = u2.user_id AND u1.created_at = u2.max_created_at
WHERE u2.max_created_at IS NULL;

方法三:使用窗口函数 (MySQL 8.0 及以上版本)

如果你使用的是 MySQL 8.0 或更高版本,可以使用窗口函数 ROW_NUMBER()。

DELETE FROM users
WHERE id NOT IN (
    SELECT id FROM (
        SELECT id, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS row_num
        FROM users
    ) AS ranked
    WHERE row_num = 1
);

总结

这几种方法都可以实现同一用户只保留最新的一条记录。具体使用哪种方法可以根据你的数据规模和 MySQL 版本来决定。如果表中的数据量较大,建议在操作前备份数据。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《mysql 同一用户有多条记录 只是保留最新的一条 怎么处理
   

还没有人抢沙发呢~