Выбор столбца, привязанного к максимальному столбцу - PullRequest
0 голосов
/ 03 апреля 2019

Я использую Salesforce Marketing Cloud и собираюсь создать таблицу, в которой будет содержаться информация о каждом подписчике и о последних действиях этого подписчика.

Существующий код тянет подписчика и его последнего открытия или щелкает в порядке, но мне нужно указать ссылку на другую таблицу для имени электронной почты.

Структура таблицы:

SUBSCRIBER
+---------+---------------------+
| SubID   | EmailAddress        |
+---------+---------------------+
|       1 | joe@test.com        |
|       2 | jane@test.com       |
+---------+---------------------+

OPENS
+---------------+------------+--------+
| EmailAddress  | EventDate  | JobID  |
+---------------+------------+--------+
| joe@test.com  | 03/04/19   | 1      |
| joe@test.com  | 03/05/19   | 2      |
| joe@test.com  | 03/06/19   | 3      |
| jane@test.com | 03/06/19   | 3      |
+---------------+------------+--------+

CLICKS
+---------------+------------+--------+
| EmailAddress  | EventDate  | JobID  |
+---------------+------------+--------+
| joe@test.com  | 03/04/19   | 1      |
| joe@test.com  | 03/05/19   | 2      |
| joe@test.com  | 03/06/19   | 3      |
| jane@test.com | 03/06/19   | 3      |
+---------------+------------+--------+

JOB
+-------------------------------+
| JobID  | EmailName            |
+--------+----------------------+
| 1      | Spring Sale          |
| 2      | You Are Missing Out  |
| 3      | Please Help          |
+--------+----------------------+

Моя цель - обновить таблицу подписчиков с помощью этой информации:

  • Какой была последняя дата помолвки
  • Было ли это обязательство электронной почтой Open или Click
  • Как называется электронное письмо

Мой текущий SQL:

SELECT
  s.[EmailAddress] AS 'EmailAddress',
  CASE  
    WHEN c.EventDate < o.EventDate THEN o.EventDate
    ELSE c.EventDate
  END AS 'LastEngagedDate',
  CASE  
    WHEN c.EventDate < o.EventDate THEN 'Open'
    ELSE 'Click'
  END AS 'EngagementType'
FROM Subscriber s
INNER JOIN (
  SELECT EmailAddress, MAX(EventDate) AS 'EventDate'
  FROM _Click 
  GROUP BY EmailAddress) c ON c.EmailAddress = s.EmailAddress
INNER JOIN (
  SELECT EmailAddress, MAX(EventDate) AS 'EventDate'
  FROM _Open 
  GROUP BY SubscriberKey) o ON o.EmailAddress = s.EmailAddress

Очевидно, это оставляет имя электронной почты. Проблема, с которой я сталкиваюсь, заключается в получении соответствующего JobID, привязанного к MAX (EventDate) для _Click и _Open, чтобы я мог присоединить JobID к таблице _Job, чтобы получить соответствующее имя электронной почты.

Дайте мне знать, если я смогу прояснить эту проблему дальше. Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2019

Используйте аналитическую row_number () следующим образом:

FROM Subscriber s
    left join
            (SELECT EmailAddress, EventDate, JobID    
             row_number() over(partition by EmailAddress order by EventDate desc) rn
            FROM _Click ) c on c.EmailAddress = s.EmailAddress and c.rn=1

Примечание c.rn=1 в условии соединения ON.Только запись с максимальной датой будет присоединена, и все столбцы доступны.И то же самое для Открытых событий.

...