删除所有重复的条目,但不删除第一个

时间:2017-10-29 10:44:34

标签: 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,但我不确定如何只删除最后一个条目,而不是第一个条目。

1 个答案:

答案 0 :(得分:4)

您可以使用:

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