У меня есть таблица, которая выглядит следующим образом:Redshift - Расчет ежемесячных активных пользователей
Date | User_ID
2017-1-1 | 1
2017-1-1 | 2
2017-1-1 | 4
2017-1-2 | 3
2017-1-2 | 2
... | ..
... | ..
... | ..
... | ..
2017-2-1 | 1
2017-2-2 | 2
... | ..
... | ..
... | ..
я хотел бы вычислить активных пользователей ежемесячно в течение качению период 30 дней. Я знаю, что Redshift не делает окна COUNT (DISTINCT)). Что я могу сделать, чтобы получить следующий результат?
Date | MAU
2017-1-1 | 3
2017-1-2 | 4 <- We don't want to count user_id 2 twice.
... | ..
... | ..
... | ..
2017-2-1 | ..
2017-2-2 | ..
... | ..
... | ..
Я попытался сделать это (и явно потерпел неудачу). Вот мой код:
SELECT event_date
,sum(user_count) mau_count
,CASE
WHEN event_date = date_trunc('week', event_date)
THEN 1
ELSE 0
END week_starting FROM (
SELECT event_date
,count(*) OVER (PARTITION BY event_date ORDER BY event_date ROWS BETWEEN 30 PRECEDING
AND CURRENT ROW
) AS user_count <-- I know this is wrong. Just my attempt :)
FROM (
SELECT DISTINCT (user_id)
,event_date
FROM event_table
) daily_distinct_users
GROUP BY event_date
) cumulative_daily_distinct_users GROUP BY event_date;
Пожалуйста, дайте мне знать, как я могу точно подсчитать количество MAU. Благодаря!
могут отсутствовать даты? и если да, то как это следует обрабатывать? –
Нет пропущенных дат, так как мы получаем хотя бы одно событие в день, если не больше. Хотя обычно больше :) – CodingInCircles