mysql - 删除所有重复的条目但不是第一个

标签 mysql sql

我有一个看起来像这样的表:

+ id + lastSeen   + lastSeenMS + value +
| 1  | 1509272314 |     123    |   12  |
| 2  | 1509272314 |     123    |   19  |
| 3  | 1509272314 |     123    |   17  |
| 4  | 1509272532 |     453    |   25  |

现在我需要删除除第一个具有相同 lastSeenlastSeenMS 值的条目之外的所有条目。

我考虑过使用 GROUP BY lastSeen, lastSeenMS 但我不确定如何只删除最后的条目而不是第一个。

最佳答案

你可以使用:

DELETE FROM table_name
WHERE ID NOT IN (SELECT MIN(ID)
                 FROM table_name
                 GROUP BY lastSeen, lastSeenMS);

Rextester Demo

每组 ID 最小的记录将保留在表中。 警告!仅当 IDUNIQUENOT NULL 时才使用此方法。


编辑:

与上述相同的逻辑,但适用于 MySQL 方言:

DELETE t1
FROM tab t1
LEFT JOIN (SELECT MIN(ID) AS ID
           FROM tab
           GROUP BY lastSeen, lastSeenMS) t2
  ON t1.ID = t2.ID
WHERE t2.ID IS NULL;

Rextester Demo

关于mysql - 删除所有重复的条目但不是第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999237/

相关文章:

javascript - 复选框和输入值位于同一行

sql - SQL 绑定(bind)参数会影响性能吗?

MySQL : getting top 100 records for each category

python - 重定向时收到错误格式错误的 header

php - 如何使用 mysql 在 docker 中配置和运行旧的 php 5.4 Web 应用程序?

sql - 将 Always Encrypted 与 EF Core 结合使用并将主 key 存储在 Azure Key Vault 中

php - 无法通过 SQL 数据库在 PHP 中订购?

php中密码的php验证

php - 对流量大的网站上的帖子点赞

php - 使用 php 更新查询不起作用