Есть 2 таблицы - posts и comments. Posts - сообщения, comments - комментарии к сообщениям.
У каждого поста/комментария есть userID автора и timestamp.
Есть метрика - активность пользователя: пользователь написал пост или/и оставил комментарий.
Как легче всего подсчитать количество уникальных активных пользователей по дням?
Чтобы подсчитать кол-во уникальных активных пользователей, которые написали сообщение, можно сделать такой sql-запрос:
SELECT count(distinct(p.userID)) AS total ,DATE_FORMAT(FROM_UNIXTIME(p.timestamp), '%d-%m-%Y') AS date FROM posts_table p GROUP BY DATE_FORMAT(FROM_UNIXTIME(p.timestamp), '%d-%m-%Y');
Кол-во уникальных активных пользователей, которые написали комментарии, считается аналогично:
SELECT count(distinct(с.userID)) AS total ,DATE_FORMAT(FROM_UNIXTIME(с.timestamp), '%d-%m-%Y') AS date FROM comments_table c GROUP BY DATE_FORMAT(FROM_UNIXTIME(c.timestamp), '%d-%m-%Y');
Вопрос: как подсчитать кол-во уникальных активных пользователей в сумме по комментам и постам?
Загвоздка в том, что если пользователь в этот день отправил сообщение, то он уже считается активным и его НЕ нужно учитывать в комментариях - и наоборот.
Т.е. алгоритм звучит примерно так:
Считаем по дням уникальных пользователей по постам, затем считаем по дня уникальных пользователей по комментариям, но при этом, если в данный день юзер уже написал пост, то его комментарий уже не надо учитывать.