Получить самую последнюю запись о человеке, добавленную в аккаунт - PullRequest
0 голосов
/ 16 февраля 2019

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

0 голосов
/ 16 февраля 2019

Если я следил за вами правильно, вы хотите извлечь последний контакт, связанный с каждой учетной записью.

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