2012-02-02 78 views
0

我的电话记录表作为这样的:删除重复记录而保留一个记录

ID int (Primary Key) 
company varchar 
dbaname varchar 
coaddress varchar 
cocity varchar 
costate varchar 
cozip varchar 
phonenum varchar 

我想做到的是消除所有重复的电话号码(PHONENUM场),但保留一个occurence。

在做重复检查,我看到有在表(共约141000)超过41000重复的电话号码。

我怎么会去这样做此基础上的电话号码?

+0

可能重复的[SQL - 如何删除重复行?](http://stackoverflow.com/questions/18932/sql-how-can-i-remove-duplicate-rows) – 2012-02-02 16:00:47

+0

这可能不是看起来很简单:公司可能从一个地址移动到另一个地址,但保留相同的电话号码。所以真正的问题是你宁愿扔掉多个地址中的哪一个。 – dasblinkenlight 2012-02-02 16:03:25

+0

@dasblinkenlight - 这是一个很好的观点。其他任何数据都可能不同,因为业务可能会移动等。实际上,我并不关心任何其他数据。这是一个拨号器,所以电话号码本质上是重要的。我不希望多个座席打电话给同一个电话号码,并通过同一线索互相摸索。 – RogueSpear00 2012-02-02 16:10:22

回答

1

假设你想只保留最新记录:

DELETE yourTable 
FROM yourTable T 
     LEFT JOIN 
     ( SELECT MAX(ID) [ID] 
      FROM yourTable 
      GROUP BY Phonenum 
     ) MaxT 
      ON MaxT.ID = T.ID 
WHERE MaxT.ID IS NULL 

我肯定会存档要删除到另一个表什么的,虽然没有保证你无需手动检查或添加删除正确记录删除语句的更多标准。

+0

在提出问题之前,我已完成备份。很久以前了解我的课程! :) – RogueSpear00 2012-02-02 16:52:33