В настоящее время я пытаюсь изменить таблицу для агрегирования метрик электронной почты по уровням подписчиков. Вот как выглядит таблица, с которой я работаю:
SELECT accountid,
jobid,
listid,
batchid,
subscriberkey,
eventdate,
eventtype,
isunique,
triggerersenddefinitionobjectid,
triggeredsendcustomerkey,
url,
linkname,
linkcontent,
emailid,
schedtime,
pickuptime,
deliveredtime,
eventid,
jobtype,
jobstatus,
emailname,
emailsubject,
sendtype,
dynamicemailsubject,
emailsenddefinition
FROM email_metrics;
Я хочу изменить ее так, чтобы для каждой уникальной комбинации (subscriberkey + emailid) у меня были данные о том, действительно ли они открыл тот же адрес электронной почты, и если они нажали на это письмо.
Пример того, как будут выглядеть текущие данные (я упростил структуру таблицы до 3-х столбцов для простоты объяснения моей проблемы, извините, не уверен, как вставить сюда таблицу, так что это может выглядеть запутанно):
Пример записи 1:
Subscriberkey | EmailID | Eventtype Open
1234 | 2 | Click
1234 | 2 |
И я стремлюсь существенно изменить его до одной записи для каждой уникальной комбинации (SubscriberKey, EmailName)
:
SubscriberKey | EmailID2 | Is_Open | Is_Click
1234 | 2 | True | True
Это сведет воедино все данные, относящиеся к определенной c подписке + комбо отправки по электронной почте, и отобразит соответствующие метрики на одной записи.
Я мог успешно сделать это раньше, но мой ноутбук недавно умер, и, к сожалению, мой ноутбук Сценарий не может быть извлечен :(
До сих пор я придумал следующее, но обнаружил, что в моих данных, сгенерированных из Left Joins, есть дубликаты, у меня возникли проблемы с пониманием того, как могу убедиться, что это не произойдет с моими данными:
WITH email_sent AS (
SELECT *
FROM email_metrics em
WHERE eventtype ='Sent'
),
email_open AS (
SELECT *
FROM email_metrics em2
WHERE eventtype ='Open'
AND isunique = True),
email_click AS (
SELECT *
FROM email_metrics em3
WHERE eventtype='Click'
AND isunique = True
)
SELECT DISTINCT a.jobid,
a.subscriberkey,
a.send_time,
a.emailid,
a.emailname,
a.emailsubject,
a.dynamicemailsubject,
a.emailsenddefinition,
a.is_opened,
a.open_date,
COALESCE (c.eventtype,'Not Clicked') AS is_click,
c.eventdate AS click_date,
c.url,
c.linkname,
c.linkcontent
FROM
(SELECT DISTINCT s.jobid,
s.subscriberkey,
(s.eventdate) AS send_time,
s.emailid,
s.emailname,
s.emailsubject,
s.dynamicemailsubject,
s.emailsenddefinition,
COALESCE (o.eventtype, 'Not Opened') AS is_opened,
(o.eventdate) AS open_date
FROM email_sent s
LEFT JOIN email_open o ON (s.jobid=o.jobid AND s.subscriberkey=o.subscriberkey)) a
LEFT JOIN email_click c ON (a.jobid=c.jobid AND a.subscriberkey=c.subscriberkey);