2016-05-13 122 views
0

我有一张表,需要删除整个行,其中ID出现在第二次和后续时间,但保留第一个出现的suCustomerIDBy。 M表具有作为主键的ID和被复制的CustometID。所以我需要删除重复的CustomerID的所有行。上述删除重复多次,但留下第一次出现的ID

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

的代码将删除所有的ID,包括每一标识的第一次出现,但我需要保持他们的第一次出现。请指教。

+1

待办事项你有另一个独特的专栏? –

+0

你怎么知道哪一个是第一个? – Malk

+0

是的,有一个row_id这是一个主键 – enigma6205

回答

0

这段代码应该给你你需要的东西。

可能有更好的方法来做到这一点,如果你能为表1

提供完整的表模式如果你获得的行号,然后就忽略了第一批:

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

谢谢。我会尝试按照我的特殊需要进行调整,并接受您的回答 – enigma6205

0
delete a from(
Select dense_rank() OVER(PARTITION BY id ORDER BY id) AS Rn,* 
from Table1)a 
where a.Rn>1 
+0

尽管此代码可能会回答问题,但如果提供 关于_why_和/或_how_的附加上下文,则回答问题将显着提高其长期值 。请[编辑]你的答案,添加一些解释。 –