как связать неподписавшихся пользователей из нескольких дат отправки кампании без идентификатора задания, который может присоединиться к определенной дате отправки и дате отмены - PullRequest
0 голосов
/ 31 мая 2019

Используя Athena (Presto), мне нужно рассчитать коэффициент отказа от подписки на некоторые почтовые кампании, которые мы рассылаем еженедельно.Кампания может иметь несколько дат отправки (может быть отправлено более одного раза), но в таблице нет идентификатора, который я мог бы использовать, чтобы связать конкретную отправку с фактическим отказом от подписки.

например, электронная почта, приходящая с того же идентификатора кампании:отправлено в даты «12–04-2019» и «17 - 04 - 2019».Я вижу некоторых пользователей, отписавшихся от подписки после отправки второго сообщения (с 17-4 = 2019 и далее), но я не могу быть уверен, что отписка поступает со второго письма вместо первого.

Единственное, что я могу сделать, - это решить, что все клики отмены подписки (у меня есть unsubscribe_date) после второго письма 'sent_date' должны быть отнесены ко второму письму.

Я пытаюсь написатьSQL-код, который делает работу.Я думал использовать оконную функцию 'over partition by campaign_id, sent_date' для суммирования отписавшихся пользователей по кампании и sent_date.но это не похоже на работу.Я использую Simba Ahtena JDBC.


SELECT 
campaign_sent,

date_sent,

COUNT(DISTINCT id_sent) AS tot_sent,

COUNT(DISTINCT (CASE WHEN date_sent<= Unsubscribe_Date THEN id_unsubscribe end )) OVER (PARTITION BY campaign_sent , date_sent ) AS unsubscribed_users_per_sent_date

FROM

(SELECT campaign_sent,

date_sent,

id as id_sent

        FROM email_send 

        GROUP BY 1,2,3

        )t

LEFT JOIN

(SELECT Unsubscribe_Date ,

 campaign_unsubscribe,

id as id_unsubscribe

          FROM email_unsubscribe

GROUP BY 1,
2,3

          ) z

  ON t.id_sent = z.id_unsubscribe

 AND t.campaign_sent= z.campaign_unsubscribe 

 GROUP BY 1,2

ORDER BY date_sent ASC

Не уверен, что раздел, выполняющий то, что я ожидаю, плюс я получаю эту ошибку:

[Simba] AthenaJDBC Ошибкабыл сброшен с клиента AWS Athena.SYNTAX_ERROR: строка 5: 1: '' count '(DISTINCT (CASE WHEN ("date_sent" <= "Unsubscribe_Date") THEN "id_unsubscribe" END)) OVER (PARTITION BY "campaign_sent", "date_sent")' должно быть агрегатомВыражение или появляется в предложении GROUP BY [Состояние SQL = HY000, Код ошибки БД = 100071] </p>

Если я сгруппирую его, я получу, конечно, еще одну ошибку:

[Симба] AthenaJDBC Произошла ошибка в клиенте AWS Athena.SYNTAX_ERROR: строка 5: 1: предложение GROUP BY не может содержать агрегатов или оконных функций: ["count" (DISTINCT (CASE WHEN ("date_sent" <= "Unsubscribe_Date") THEN "id_unsubscribe" END)) OVER (PARTITION BY "campaign_sent", "date_sent")] [Состояние SQL = HY000, код ошибки БД = 100071] </p>

...