Получить самую последнюю запись о человеке, добавленную в аккаунт

Я пытаюсь создать таблицу идентификаторов контактов (первичных ключей) из последних созданных записей, назначенных каждой учетной записи определенного типа в нашей организации 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
Другие вопросы по тегам