我正在尝试构建与我们Salesforce org中每个帐户分配给每个帐户的最新创建的记录的联系人表(主键)。
在Salesforce营销云中工作,我正在尝试构建一个可以自动更新的示例列表,以便我要测试的记录永远不会过时。我只需要每个帐户中的一个示例即可进行测试。由于我想确保记录不是陈旧的,因此我想选择分配给每个帐户的最新记录。
每个联系人都分配给一个且只有一个帐户。帐户ID作为联系记录上的外键。联系人的创建日期也是联系记录上的字段。
示例列表需要包含居住在帐户记录上的电子邮件地址,ContactID和管理公司的名称。
我认为对帐户表进行方向性加入将可以解决问题,但这无效。我认为那是因为没有什么区别要选择的记录。
这是我为代码所拥有的,这是无用的...
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
语法会签出,但是每次运行时我都会收到系统错误。
营销云在旧版本的SQL Server上运行,因此一些最新的查询功能将不总是可用。
是的,我是SQL的相对菜鸟。如果这有一个非常简单的解决方案,我不会感到惊讶,但是我找不到另一个描述解决方案的条目,所以...
如果我正确跟随您,则要拉出与每个帐户相关的最新联系人。
在数据库服务器上不支持窗口功能(似乎是您的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