删除/忽略表中的重复记录并仅保留最早的记录

时间:2013-08-21 15:01:43

标签: sql sql-server database

我需要一个SQL查询来删除下图中的重复项。假设表的名称是“打开”。 enter image description here

正如您所看到的,Id,SendQueueId,SubscriberId和Email中的记录几乎相同。唯一不同的是他们的DateTime。我只需要从每个Id中选择一个,这样我的ID就会是唯一的,只保留最早的ID。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

标准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);