Когортный анализ пользователей SaaS в SQL - PullRequest
0 голосов
/ 06 августа 2020

У меня есть некоторые данные пользователей SaaS, которые выглядят следующим образом:

start_month end_month   User_Id
2019-10 2019-10 1
2019-10 2019-11 2
2019-10 2019-12 3
2019-10 2019-12 4
2019-11 2019-11 5
2019-11 2019-12 6
2019-11 2019-12 7
2019-11 2020-01 8
2019-12 2019-12 9
2019-12 2020-01 10
2019-12  NULL   11
2019-12 2020-02 12

Как видите, данные содержат дату начала подписки и дату окончания подписки.

start_month и end_month - это строки, созданные с даты начала как TO_CHAR(date_trunc('month', start_date), 'yyyy-MM') AS start_month

end_month может быть пустым, если подписка все еще активна.

Это база данных postgresql.

Используя эти данные, я должен создать когортный отчет, который должен показывать, сколько людей начали в каждый месяц, и сколько людей из этой когорты завершили подписку в следующем месяце. По приведенным выше данным, 4 пользователя запустились в 2019-10. 1 закончился в том же месяце (0), 1 закончился в месяце 1 и 2 закончился в месяце 2. Точно так же мы должны получить для других когорт месяца начала.

Извините, но у меня нет абсолютно никаких идея о том, как я могу составить этот отчет. Я искал inte rnet, но не смог найти подходящих ответов, где когорта создается только с датами начала и окончания. Пожалуйста, помогите.

1 Ответ

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

Если я правильно понял, вы можете использовать условную агрегацию:

select start_month, count(*),
       count(*) filter (where end_month is null or to_date(end_month, 'YYYY-MM') >= to_date(start_month, 'YYYY-MM') + interval '1 month') as month_1,
       count(*) filter (where end_month is null or to_date(end_month, 'YYYY-MM') >= to_date(start_month, 'YYYY-MM') + interval '2 month') as month_2
from users u
group by start_month;

Здесь - это db <> fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...