2013-08-21 123 views
1

我需要一个SQL查询来删除下图中的重复项。假设表格的名称是“打开”。 enter image description here删除/忽略表中的重复记录并只保留最早的记录

正如您所看到的,在Id,SendQueueId,SubscriberId和Email中有很多记录几乎相同。唯一不同的是他们的DateTime。我只需要从每个ID中选择一个,以便我的ID将是唯一的,并且只保留最早的一个。

+0

...你可能不希望显示在互联网上的人的电子邮件地址。 – anaximander

+0

@anaximander你可能想找到解决问题的办法cz,这就是为什么我在这里。 – Disasterkid

+0

有点不为...如果我有解决方案,我会发布它,但在此期间,我只是试图帮助你,指出这些电子邮件地址的所有者可能不希望他们在网上发布那样的。不需要捕捉。 – anaximander

回答

2

使用公用表达式使用ROW_NUMBER函数识别重复项,并删除指定为“第一个”的所有出现项。

;with cte as (
    select *, 
    row_number() over (
     partition by Id, SendQueueId, SubscriberId, Email, WP_CampaignId 
     order by DateTime 
    ) as RN 
    from 
    Opens 
) 

delete 
    cte 
where 
    RN > 1 
0

另一suolution与标准的SQL:

delete from opens a 
where not exists 
(Select * 
      From (select Id, 
         SendQueueId, 
         SubscriberId, 
         Email, 
         WP_CampaignId, 
         min(date_time) date_time 
        From opens 
       group by Id, SendQueueId, SubscriberId, Email, WP_CampaignId) b 
     Where a.id = b.id 
      and a.SendQueueId = b.SendQueueId 
      and a.SubscriberId = b.SubscriberId 
      and a.Email = b.Email 
      and a.WP_CampaignId = b.WP_CampaignId);
相关问题