Получить самую последнюю запись о человеке, добавленную в аккаунт
Я пытаюсь создать таблицу идентификаторов контактов (первичных ключей) из последних созданных записей, назначенных каждой учетной записи определенного типа в нашей организации Salesforce.
Работая в Salesforce Marketing Cloud, я пытаюсь создать примерный список, который я могу настроить для автоматического обновления, чтобы записи, с которыми я тестирую, никогда не устаревали. Мне нужен только один пример из каждого аккаунта, чтобы провести тестирование. Поскольку я хочу убедиться, что запись не устарела, я хочу выбрать самую последнюю запись, назначенную каждой учетной записи.
Каждый контакт назначен одной и только одной учетной записи. Идентификатор учетной записи является внешним ключом в записи контактов. Дата создания Контакта также является полем в Контактной записи.
Образец списка должен содержать адрес электронной почты, 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
Синтаксис проверяется, но при каждом запуске я получаю системную ошибку.
Marketing Cloud работает на более старой версии SQL Server, поэтому некоторые более поздние функции запросов не всегда будут работать.
И да, я относительный нуб к SQL. Меня не удивит, если это действительно простое решение, но я не смог найти другую запись, описывающую решение, так что...
1 ответ
Если я следил за вами правильно, вы хотите извлечь последние контакты, связанные с каждой учетной записью.
На серверах баз данных, которые не поддерживают оконную функцию (что, похоже, относится к вашей СУБД), одним из типичных решений является добавление специального условия к 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