SQL按结果分组-Salesforce营销云
我希望找到所有重复的记录,然后从每个集合中选择所有重复项减去最旧的记录,这样我就可以删除重复项并保留一条唯一的记录 当我运行这个查询时,我得到了我想要的结果。给我留下唯一的电子邮件地址和最早的创建日期 当我向查询中添加SubscriberKey时,结果会加倍!为什么呢?我只想看到SubscriberKey绑定到我找到的子查询中日期最早的EmailAddressSQL按结果分组-Salesforce营销云,sql,group-by,salesforce-marketing-cloud,Sql,Group By,Salesforce Marketing Cloud,我希望找到所有重复的记录,然后从每个集合中选择所有重复项减去最旧的记录,这样我就可以删除重复项并保留一条唯一的记录 当我运行这个查询时,我得到了我想要的结果。给我留下唯一的电子邮件地址和最早的创建日期 当我向查询中添加SubscriberKey时,结果会加倍!为什么呢?我只想看到SubscriberKey绑定到我找到的子查询中日期最早的EmailAddress 您将获得多条记录,因为您正在按SubscriberKey进行分组。您需要通过EmailAddress和CreatedDate进行匹配。尝
您将获得多条记录,因为您正在按SubscriberKey进行分组。您需要通过EmailAddress和CreatedDate进行匹配。尝试执行子查询并将其连接回原始表
select
[_ListSubscribers].EmailAddress,
[_ListSubscribers].SubscriberKey,
[_ListSubscribers].CreatedDate,
from
(
SELECT
EmailAddress,
MIN(CreatedDate) as CreatedDate
FROM [_ListSubscribers]
GROUP BY EmailAddress, SubscriberKey
Having count(EmailAddress)>1
) SubTbl
inner join
[_ListSubscribers] on
[_ListSubscribers].EmailAddress = SubTbl.EmailAddress
and
[_ListSubscribers].CreatedDate = SubTbl.CreatedDate
我希望找到所有重复的记录,然后从每个集合中选择所有重复项减去最旧的记录,这样我就可以删除重复项并保留一条唯一的记录
使用行号:
但是,如果要删除除最新记录以外的所有记录,可以使用:
delete from _ListSubscribers
where CreatedDate < (select max(CreatedDate)
from _ListSubscribers l2
where l2.EmailAddress = _ListSubscribers.EmailAddress
);
如果想要最早的记录,可以使用min而不是max来翻转逻辑
select
[_ListSubscribers].EmailAddress,
[_ListSubscribers].SubscriberKey,
[_ListSubscribers].CreatedDate,
from
(
SELECT
EmailAddress,
MIN(CreatedDate) as CreatedDate
FROM [_ListSubscribers]
GROUP BY EmailAddress, SubscriberKey
Having count(EmailAddress)>1
) SubTbl
inner join
[_ListSubscribers] on
[_ListSubscribers].EmailAddress = SubTbl.EmailAddress
and
[_ListSubscribers].CreatedDate = SubTbl.CreatedDate
select l.*
from (select l.*,
row_number() over (partition by EmailAddress order by CreatedDate desc) as seqnum
from _ListSubscribers l
) l
where seqnum > 1;
delete from _ListSubscribers
where CreatedDate < (select max(CreatedDate)
from _ListSubscribers l2
where l2.EmailAddress = _ListSubscribers.EmailAddress
);