mysql - SQL 删除除每个唯一值的最后 N 行之外的所有行

标签 mysql sql sql-delete

这是一个艰难的, 对于不同字段中的每个唯一值,我将如何删除除最后一行(比如 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/

相关文章:

php - PHP中的PDO,如何改进这个PDO mysql代码

mysql - 复杂的sql查询(GROUP BY)

mysql - 为什么我无法删除此查询中不存在其他列的列?

php - PDO 查询始终返回 1 或 true

mysql - MySQL 会删除引用吗?

mysql多对多删除级联留下孤儿

mysql - 智能 SQL 分组依据

php - 在 PHP 中构建多维数组时更新其内的值

python - Pyspark:在groupBy之后获得百分比结果

mysql - phpMyAdmin 没有正确计算行数