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

根据列上的相同值删除被视为重复的记录,并保持最新记录

奚正谊
2023-03-14
问题内容

我想删除在某些列中基于相同值的被视为重复的记录,并在下面的示例中保留一个基于InsertedDate的最新记录。我想要一个不使用游标而是基于设置的解决方案。目标:删除所有重复项并保持最新。

下面的ddl创建了一些重复项。需要删除的记录为:John1和John2,因为它们具有与John3相同的ID,而John3是最新的记录。

另外,需要删除记录John5,因为还有另一条ID = 3且较新的记录(John6)。

Create table dbo.TestTable (ID int, InsertedDate DateTime, Name varchar(50))

Insert into dbo.TestTable Select 1, '07/01/2009', 'John1'
Insert into dbo.TestTable Select 1, '07/02/2009', 'John2'
Insert into dbo.TestTable Select 1, '07/03/2009', 'John3'
Insert into dbo.TestTable Select 2, '07/03/2009', 'John4'
Insert into dbo.TestTable Select 3, '07/05/2009', 'John5'
Insert into dbo.TestTable Select 3, '07/06/2009', 'John6'

问题答案:

这有效:

delete t 
from TestTable t
left join 
(
    select id, InsertedDate = max(InsertedDate) from TestTable
    group by id
) as sub on sub.id = t.id and sub.InsertedDate = t.InsertedDate
where sub.id is null

如果您必须处理领带,那会有些棘手。



 类似资料:
  • 问题内容: 我有独特的和领域。电子邮件被重复。我只想保留所有重复项的一个电子邮件地址,但保留最新的(最后插入的记录)。 我该如何实现? 问题答案: 假设您的表包含以下数据: 因此,我们需要找到所有重复的电子邮件并删除所有重复的电子邮件,但是最新的ID。 在这种情况下,,和重复,所以我们要删除ID为1,7,2和6。 为此,首先我们需要查找所有重复的电子邮件: 然后,从该数据集中,我们需要为这些重复的

  • 问题内容: 我有以下带有重复信息的示例数据: 根据上述数据集,如何删除重复的Emp ID,而仅保留指定了最大日期/时间的Emp ID? 因此,根据以上内容,我只会看到ID:1、3和5。 谢谢。 问题答案: 就像是:

  • 问题内容: 在我们的系统中,我们每小时从外部数据库导入一次。由于导入脚本中的错误,现在有一些重复的记录。 如果任何记录具有和,则视为重复。 我可以运行什么代码来查找和删除这些重复项? 我在玩这个: 它似乎返回了一些重复项,但是我不确定如何从那里删除? 有任何想法吗? 问题答案: 您可以尝试以下方法: 还是纯sql:

  • 问题内容: 我有一个这样的表: 我正在尝试删除具有3个以上具有相同ID的名称的记录,但要删除所有记录。因此,我试图得到这样的东西: 我不了解如何编写此查询。我已经达到了保留一个记录但没有记录阈值的程度: 给我: 有什么建议?哦,对了,我不在乎合并时会保留哪些记录。 问题答案: 您可以使用CTE做到这一点

  • 问题内容: 我有下表,现在我需要删除具有重复的“ refID”但至少有一行与该引用对应的行,即我需要删除第4行和第5行。请对此提供帮助 问题答案: 这类似于Gordon Linoff的查询,但没有子查询: 这将使用内部联接仅删除其中另一行具有相同的refID但具有较低ID的行。 避免子查询的好处是能够利用索引进行搜索。该查询在refID + ID上使用多列索引时应表现良好。

  • 本文向大家介绍sql 删除表中的重复记录,包括了sql 删除表中的重复记录的使用技巧和注意事项,需要的朋友参考一下 遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) 然后就可以直接删除,基本原理就是,找到重复记录的每一条记录,排除掉重复id最小的记录,删除剩余的重复