我有一个看起来像这样的表:
+ id + lastSeen + lastSeenMS + value +
| 1 | 1509272314 | 123 | 12 |
| 2 | 1509272314 | 123 | 19 |
| 3 | 1509272314 | 123 | 17 |
| 4 | 1509272532 | 453 | 25 |
现在我需要删除除第一个具有相同 lastSeen
和 lastSeenMS
值的条目之外的所有条目。
我考虑过使用 GROUP BY lastSeen, lastSeenMS
但我不确定如何只删除最后的条目而不是第一个。
最佳答案
你可以使用:
DELETE FROM table_name
WHERE ID NOT IN (SELECT MIN(ID)
FROM table_name
GROUP BY lastSeen, lastSeenMS);
每组 ID 最小的记录将保留在表中。
警告!仅当 ID
为 UNIQUE
且 NOT 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;
关于mysql - 删除所有重复的条目但不是第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999237/