我有一张看起来像这样的表:
+ 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
,但我不确定如何只删除最后一个条目,而不是第一个条目。
答案 0 :(得分:4)
您可以使用:
DELETE FROM table_name
WHERE ID NOT IN (SELECT MIN(ID)
FROM table_name
GROUP BY lastSeen, lastSeenMS);
<强> Rextester Demo 强>
每组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;
<强> Rextester Demo 强>