1

我需要一个 SQL 查询来删除下图中的重复项。假设表的名称是“Opens”。 在此处输入图像描述

如您所见,在 Id、SendQueueId、SubscriberId 和 Email 中有很多几乎相同的记录。唯一不同的是他们的日期时间。我只需要从每个 ID 中选择一个,这样我的 ID 将是唯一的,并且只保留最早的 ID。

4

2 回答 2

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
于 2013-08-21T15:05:56.403 回答
0

使用标准 sql 的另一种解决方案:

从打开一个
 不存在的地方
 (选择 *
          从(选择 ID,
                       发送队列 ID,
                       订阅者 ID,
                       电子邮件,
                       WP_CampaignId,
                       分钟(日期时间)日期时间
                  从打开
                 按 ID、SendQueueId、SubscriberId、Email、WP_CampaignId 分组)b
         其中 a.id = b.id
           和 a.SendQueueId = b.SendQueueId
           和 a.SubscriberId = b.SubscriberId
           a.Email = b.Email
           和 a.WP_CampaignId = b.WP_CampaignId);
于 2013-08-21T15:37:20.147 回答