【问题标题】:Delete IDs that repeat more then once, but leave the first occurrence [duplicate]删除重复多次但保留第一次出现的 ID [重复]
【发布时间】:2016-09-10 05:34:08
【问题描述】:

我有一个表,需要删除第二次和后续出现 ID 的整行,但顺便留下第一次出现的 suCustomerID。 M 表具有作为主键的 ID 和重复的 CustometID。所以我需要删除所有具有重复 CustomerID 的行。

Delete From Table1 where ID IN (select ID From Table1 where count(distinct CutomerID) >=2 group by CustomerID)

上面的代码将删除所有 id,包括每个 ID 的第一次出现,但我需要保留它们的第一次出现。请指教。

【问题讨论】:

  • 您还有其他独特的列吗?
  • 你怎么知道哪个先出现?
  • 是的,有一个row_id,它是一个primary key

标签: sql sql-server sql-delete


【解决方案1】:
delete a from(
Select dense_rank() OVER(PARTITION BY id ORDER BY id) AS Rn,*
from Table1)a
where a.Rn>1

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
【解决方案2】:

这段代码应该能满足你的需要。

如果您可以为 Table1 提供完整的表架构,可能会有更好的方法来做到这一点

如果你获得了行号,然后忽略第一个:

;WITH cte 
AS 
(
  SELECT ID, 
     ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS Rn
  FROM [Table1]
)
DELETE cte WHERE Rn > 1

【讨论】:

  • 谢谢。我会尝试根据我的特殊需要调整它并接受您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2022-11-22
  • 1970-01-01
  • 2016-10-11
  • 2022-11-19
  • 2022-10-05
相关资源
最近更新 更多