我需要一个 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);