MySQL. Я хочу получить процент писем, которые были нажаты не позднее, чем через 10 минут после того, как пользователь получил письмо - PullRequest
1 голос
/ 02 апреля 2020

У меня есть 2 таблицы в MySQL:

emails_sent(
id int primary key,
id_type int,
date_sent datetime)

emails_clicks(
id int primary key,
id_email int,
date_click datetime,
foreign key(id_email) references emails_sent(id))

Я хочу написать запрос, который будет возвращать процент электронных писем, которые были нажаты не позднее, чем через 10 минут после того, как пользователь получил электронное письмо. Сгруппированы по каждому типу электронной почты (id_type). Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Примечание. Предполагается, что SQL Сервер (один из исходных тегов).

Вы можете использовать подзапрос, чтобы получить первый щелчок и затем агрегировать:

select s.id_type,
       avg(case when first_click_date < dateadd(minute, 10, date_sent)
                then 1.0 else 0
           end) as num_clicks
from (select s.*,
             (select min(date_click) 
              from email_clicks c
              where c.id_email = s.id
             ) as first_click_date
      from email_sent s
     ) s
group by id_type;

Это обрабатывает пользователи, которые нажимают несколько раз, спустя 10 минут или нет.

0 голосов
/ 02 апреля 2020

Вы можете сделать условное среднее.

В MySQL это будет:

select s.id_type, avg(c.date_click < s.date_sent + interval 10 minute) res
from email_sent s
left join email_clicks c on c.id_email = s.id
group by id_type

Для каждой каждой строки в email_sent запрос восстанавливает соответствующую строку в email_clicks; если по электронной почте щелкнули менее 10 минут, условие в avg() возвращает 1, иначе 0. Среднее значение представляет собой соотношение количества сообщений электронной почты, по которым щелкнули менее 10 минут после отправки (в виде десятичного значения от 0 до 1).

...