这是一个艰难的, 对于不同字段中的每个唯一值,我将如何删除除最后一行(比如 3 行)以外的所有内容?
这是问题的视觉图:
id | otherfield
---------------
1 | apple <- DELETE
2 | banana <- KEEP
3 | apple <- DELETE
4 | apple <- KEEP
5 | carrot <- KEEP
6 | apple <- KEEP
7 | apple <- KEEP
8 | banana <- KEEP
我如何在 SQL 中完成此操作?
最佳答案
未经测试,但按照这些思路可能会起作用:
DELETE t.*
FROM table t JOIN (
SELECT id
@rowNum := IF(@otherfield <> otherfield, 1, @rowNum + 1) rn,
@otherfield := otherfield otherfield
FROM (
SELECT id, otherfield
FROM table
ORDER BY otherfield, id DESC
) t, (SELECT @otherfield := NULL, @rowNum := -1) dm
) rs ON t.id = rs.id
WHERE rs.rn > 3
关于mysql - SQL 删除除每个唯一值的最后 N 行之外的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953409/