mysql - 如何删除除最近行以外的所有其他列相同的行

标签 mysql sql database

我有一个 MySQL 表,其摘录如下:

http://pastebin.com/SdYJbzgk

我需要保留 assoc_case、文档和参与者相同的每一行的最新行。例如,我只想将第 136 行保留在第 133-136 行之外。

我正在研究这个,但似乎无法适应我的需要:

SELECT
    id,
    assoc_case,
    participant,
    document,
    MAX(created)
FROM
    `table`
GROUP BY
    created,
    assoc_case,
    participant,
    document

最佳答案

在 MySQL 中,您可以使用 join 来执行此操作:

delete t
    from table t join
         (select assoc_case, participant, document, max(created) as maxc
          from table
          group by assoc_case, participant, document
         ) tt
         on t.assoc_case = tt.assoc_case and t.participant = tt.participant and
            t.document = tt.document
    where t.created < tt.maxc;

关于mysql - 如何删除除最近行以外的所有其他列相同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000480/

相关文章:

MySQL - 检索 LEFT JOIN 中关联列的最大值,其周长与主查询的 WHERE 子句不同

sql - 显示历史表中的更改历史

mysql - 如何在 Rails 中并行建立与多个数据库的连接?

mysql - 大型 mysql (innodb) 数据库 - 查询性能慢、表消失和恢复备份时间长

mysql - N 个用户的共享百分比

MySql 将一台服务器上的每个表的少量数据复制到另一台服务器上

mysql - 使用 LEFT JOIN 计数仅显示一行

带有 group by 和 having 子句的 Mysql 查询

sql - 日期类型的查询 substr 的索引是什么?

Mysql查找父记录,其中给定值在所有子记录中找到