我需要一个SQL查询来删除下图中的重复项。假设表的名称是“打开”。
正如您所看到的,Id,SendQueueId,SubscriberId和Email中的记录几乎相同。唯一不同的是他们的DateTime。我只需要从每个Id中选择一个,这样我的ID就会是唯一的,只保留最早的ID。
答案 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);