WITH cohort AS (
SELECT o.user_id,
MIN(CAST(DATE_TRUNC('month', e.event_time) AS DATE)) AS cohort_month
FROM tools_shop.orders o
JOIN tools_shop.users u ON u.user_id = o.user_id
JOIN tools_
shop.events e ON e.user_id = u.user_id
GROUP BY o.user_id
)
SELECT
cohort_month AS cohort_month,
CAST(DATE_TRUNC('month', e.event_time) AS DATE) AS event_month,
COUNT(DISTINCT c.user_id) AS unique_users
FROM cohort c
JOIN tools_
shop.events e ON e.user_id = c.user_id
GROUP BY cohort_month, event_month
ORDER BY cohort_month, event_month;
Не забудьте добавить запрос из предыдущего задания в общее табличное выражение.
Запрос из предыдущего задания
SELECT DISTINCT u.user_id,
MIN(DATE_TRUNC('month', e.event_time)):: date AS cohort_users_cnt
from tools_shop.users as u
JOIN tools_shop.orders as o ON u.user_id = o.user_id
JOIN tools_ shop.events as e ON u.user_id = e.user_id
GROUP BY u.user_id;
схема tools_shop
таблица users:
user_id-идентификатор пользователя
created_at-дата создания аккаунта пользователя
таблица events
event_id-идентификатор события
event_time-дата и время события
event_name-название события
таблица orders
order_id-идентификатор заказа
user_id-идентификатор пользователя оформившего заказ
created_at-дата, когда пользователь оформил заказ но не оплатил его
paid_at-дата оплаты заказа