检索添加到帐户的最新个人记录

时间:2019-02-15 22:30:32

标签: sql salesforce-marketing-cloud

我正在尝试为分配给我们Salesforce组织中特定类型的每个客户的最近创建记录的联系人ID(主键)表。

在Salesforce Marketing Cloud中工作,我正在尝试构建一个示例列表,可以将其设置为自动更新,以使测试的记录永远不会过时。每个帐户只需要一个示例即可进行测试。由于我想确保记录不是陈旧的,因此我想选择分配给每个帐户的最新记录。

每个联系人都分配给一个并且只有一个帐户。帐户ID在联系记录中用作外键。联系人的创建日期也是联系人记录上的一个字段。

“样本”列表需要包含电子邮件地址,ContactID和生活在帐户记录中的管理公司的名称。

我认为对帐户表进行定向JOIN可以解决问题,但这没有用。我认为这是因为没有区别要选择的记录。

这就是我所需要的代码,这几乎没有用...

SELECT
    C.Email AS Email,
    C.Id AS Id18,
    C.AccountID AS AccountID,
    A.Management_Company AS ManagementCompany
FROM
    ENT.Contact_Salesforce_DE AS C 
    RIGHT JOIN ENT.Account_Salesforce_DE AS A ON C.AccountID = A.Id
WHERE
    A.RecordTypeId = '1234567890ABCDEFGH' AND
    A.Management_Company IS NOT NULL AND
    C.Email IS NOT NULL

语法已签出,但每次运行时都会出现系统错误。

Marketing Cloud在旧版本的SQL Server上运行,因此某些较新的查询功能将始终无法正常工作。

是的,我是SQL的相对菜鸟。如果它有一个非常简单的解决方案,我不会感到惊讶,但是我找不到描述该解决方案的其他条目,所以...

1 个答案:

答案 0 :(得分:0)

如果我正确地遵循了您的说明,则希望提取与每个帐户相关联的最新联系人。

在不支持窗口功能的数据库服务器上(这似乎是RDBMS的情况),一种典型的解决方案是在JOIN上添加特殊条件。此NOT EXISTS条件使用子查询来确保在子表中选择的记录是最新的(换句话说:没有子记录的创建日期比被联接的记录的创建日期高):

SELECT
    c.Email AS Email,
    c.Id AS Id18,
    c.AccountID AS AccountID
FROM
    ENT.Account_Salesforce_DE AS a 
    INNER JOIN ENT.Contact_Salesforce_DE AS c 
        ON c.AccountID = a.Id
        AND c.email IS NOT NULL
        AND NOT EXISTS (
            SELECT 1
            FROM ENT.Contact_Salesforce_DE AS c1
            WHERE 
                c1.email IS NOT NULL 
                AND c1.AccountID = a.Id 
                AND c1.CreatedDate > c.CreatedDate
        )
WHERE
    A.RecordTypeId = '1234567890ABCDEFGH' 
    AND A.Management_Company IS NOT NULL