我需要一个 SQL 查询来删除下图中的重复项。假设表的名称是“Opens”。
如您所见,在 Id、SendQueueId、SubscriberId 和 Email 中有很多几乎相同的记录。唯一不同的是他们的日期时间。我只需要从每个 ID 中选择一个,这样我的 ID 将是唯一的,并且只保留最早的 ID。
我需要一个 SQL 查询来删除下图中的重复项。假设表的名称是“Opens”。
如您所见,在 Id、SendQueueId、SubscriberId 和 Email 中有很多几乎相同的记录。唯一不同的是他们的日期时间。我只需要从每个 ID 中选择一个,这样我的 ID 将是唯一的,并且只保留最早的 ID。
使用公用表表达式来识别使用该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
使用标准 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);