在 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 版本来决定。如果表中的数据量较大,建议在操作前备份数据。
还没有人抢沙发呢~