当前位置: 首页 > 面试题库 >

删除除一行以外的所有重复值

方权
2023-03-14
问题内容

我有三列的表:KEYVALUELAST_UPDATED

有重复的VALUE字段。我想删除所有具有相同的行VALUE为别人 ,除了 对最近更新的一个。

因此,如果表包含这些行:

1, "A", 2013-11-08
2, "B", 2013-10-30
3, "A", 2013-11-07
4, "A", 2013-11-01
5, "B", 2013-11-01

然后,我只想保留这些行:

1, "A", 2013-11-08
5, "B", 2013-11-01

您如何在SQL中做到这一点?我想象DELETE FROM table WHERE key IN (SELECT key FROM table GROUP BY value HAVING count(*)>1)会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有
行删除呢?


问题答案:

您可以使用左联接来执行此操作:

DELETE t
FROM table t
LEFT JOIN table t2 ON t.value = t2.value
AND t2.last_updated > t.last_updated
WHERE t2.key IS NOT NULL

这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日期,则该行将被删除。您可能需要查看日期差异,而不是使用大于来比较日期,因为它比较可靠。

我希望在这种情况下,左联接的性能要比创建和联接到内联表好得多,但是如果性能是一个问题,那么最好尝试两种方法,并选择性能最稳定的方法。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 在MySQL中删除重复的行 (25个答案) 3个月前关闭。 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除

  • 问题内容: 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除非也包含,否则它将删除表中的每一行。 如果要使行的值保持最低,请执行以下操作: 如果要保留最

  • 我有一个数据集,如下所示: 但不管用。

  • 我有两个表,一个有复合主键,另一个有外键。它们都设置为删除时级联。问题是,当我从主表中删除一个复合键集“name:John date:02.02.2018”时,所有John行都会从带有外键的表中删除,但是可以有一个集合“name:John date:04.04.2018”以及日期为02.02的所有行。也删除了一些行,如何才能使其删除仅匹配外键集的行? 更新:

  • 我需要删除所有行而不留下任何唯一记录。如果存在重复,则删除所有匹配的行。Criteria是C列,如果C列中存在任何重复记录,则删除整行(包括unique)。

  • 我想通过删除所有具有相同值的行,但无法获取。