Используя 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>