Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL按结果分组-Salesforce营销云_Sql_Group By_Salesforce Marketing Cloud - Fatal编程技术网

SQL按结果分组-Salesforce营销云

SQL按结果分组-Salesforce营销云,sql,group-by,salesforce-marketing-cloud,Sql,Group By,Salesforce Marketing Cloud,我希望找到所有重复的记录,然后从每个集合中选择所有重复项减去最旧的记录,这样我就可以删除重复项并保留一条唯一的记录 当我运行这个查询时,我得到了我想要的结果。给我留下唯一的电子邮件地址和最早的创建日期 当我向查询中添加SubscriberKey时,结果会加倍!为什么呢?我只想看到SubscriberKey绑定到我找到的子查询中日期最早的EmailAddress 您将获得多条记录,因为您正在按SubscriberKey进行分组。您需要通过EmailAddress和CreatedDate进行匹配。尝

我希望找到所有重复的记录,然后从每个集合中选择所有重复项减去最旧的记录,这样我就可以删除重复项并保留一条唯一的记录

当我运行这个查询时,我得到了我想要的结果。给我留下唯一的电子邮件地址和最早的创建日期

当我向查询中添加SubscriberKey时,结果会加倍!为什么呢?我只想看到SubscriberKey绑定到我找到的子查询中日期最早的EmailAddress


您将获得多条记录,因为您正在按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
                        );