Retention седьмого дня равен 100% во всех когортах
В отчёт стейкхолдерам попал показатель удержания на седьмой день, и он равен 100% для всех когорт апреля. Вы просите показать запрос:
SELECT COUNT(DISTINCT r.user_id) * 100.0
/ COUNT(DISTINCT i.user_id) AS retention_d7
FROM installs i
LEFT JOIN events r
ON r.user_id = i.user_id
AND r.event_date = i.install_date + INTERVAL '7 day'
WHERE i.install_date BETWEEN '2026-04-01' AND '2026-04-30'
AND r.event_date IS NOT NULL;
Почему показатель всегда равен 100%?
- `INTERVAL '7 day'` прибавляет к дате установки лишний день, поэтому в числитель попадают события восьмого дня и доля завышается.
- `COUNT(DISTINCT ...)` в числителе и знаменателе фактически считает одну и ту же таблицу событий, поэтому дробь всегда сокращается в единицу.
- Условие `r.event_date IS NOT NULL` в WHERE превращает LEFT JOIN во внутреннее соединение: в знаменателе остаются только вернувшиеся пользователи.
- Диапазон BETWEEN захватывает целый месяц, поэтому когорты разных дней смешиваются в одну и итоговая доля искажается вверх.
