Короткий ответ
Нужно посчитать число уникальных user_id среди событий, попадающих в выбранный календарный месяц.
Как это работает подробнее
фильтруем события по диапазону дат месяца и считаем COUNT(DISTINCT user_id); важно использовать правильные границы интервала, чтобы не захватить первый день следующего месяца или потерять последний день текущего.
Пример кода
mau.sql
-- PostgreSQL
SELECT COUNT(DISTINCT user_id) AS mau
FROM events
WHERE event_date >= DATE '2024-03-01'
AND event_date < DATE '2024-04-01';Что использовать на практике
- Практика. для сравнения MAU между месяцами разной длины (28-31 день) иногда дополнительно нормируют на число дней или используют DAU/MAU как более устойчивую метрику; также стоит явно зафиксировать таймзону, если пользователи распределены по разным часовым поясам.
Подводные камни
- Частые ошибки. используют
event_date BETWEEN '2024-03-01' AND '2024-03-31'без учёта типа данных (если это timestamp, то такой BETWEEN отсечёт события после полуночи 31 марта) — безопаснее использовать полуоткрытый интервал>= месяц AND < следующий_месяц; забывают DISTINCT и считают число событий вместо числа пользователей.