我正在尝试为分配给我们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的相对菜鸟。如果它有一个非常简单的解决方案,我不会感到惊讶,但是我找不到描述该解决方案的其他条目,所以...
答案 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