Количество первых писем по месяцам в MySQL - PullRequest
0 голосов
/ 03 августа 2020

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

Пока я могу думать только о том, чтобы получать информацию месяц за месяцем, но должен быть способ запросить все 12 месяцев в одном запросе.

SELECT DISTINCT
    `id`
FROM
    `table1`
WHERE
    `sendtime` BETWEEN '2019-08-01' AND '2019-09-01'
        AND `id` NOT IN (SELECT 
            `id`
        FROM
            `table1`
        WHERE
            `sendtime` < '2019-08-01');

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Вы можете использовать два уровня агрегирования:

select date_format(min_sendtime, '%Y-%m') yyyy_mm, count(*) no_clients
from ( 
    select id, min(sendtime) min_sendtime
    from table1
    group by id
) t
where min_sendtime >= date_format(current_date, '%Y-%m-01') - interval 1 year
group by yyyy_mm
order by yyyy_mm

Это дает вам по одной строке для каждого из последних двенадцати месяцев (у которого есть хотя бы один клиент, получивший свое первое электронное письмо) с количеством «новое» письмо за месяц.

0 голосов
/ 03 августа 2020

Проверьте минимальное количество sendtime для каждого пользователя:

SELECT id 
FROM table1
GROUP BY id
HAVING MIN(sendtime) BETWEEN '2019-08-01' AND '2019-09-01' 

Если вам нужно количество этих идентификаторов:

SELECT COUNT(*) counter
FROM (
    SELECT id 
    FROM table1
    GROUP BY id
    HAVING MIN(sendtime) BETWEEN '2019-08-01' AND '2019-09-01' 
) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...