Допустим, у меня есть следующий набор данных в таблице с именем UserEvents:
LogIn UserID
2018-09-30 1
2018-09-30 3
2018-10-01 1
2018-10-01 2
2018-10-01 3
2018-10-02 2
2018-10-02 3
За каждый день я хотел бы возвращать количество пользователей, вошедших в систему за последний месяц. Вот ожидаемые результаты для выше:
Day PastMonthUsers
2018-09-30 2
2018-10-01 3
2018-10-02 3
Вот что я пробовал:
Select
UserEvents1.LogIn as Day,
count (distinct UserEvents1.UserID) as PastMonthUsers
from UserEvents as UserEvents1
inner join
(
Select
LogIn,
UserID
from UserEvents
) as UserEvents2
on UserEvents2.LogIn between DATE_SUB(UserEvents1.LogIn, interval 1 month) and UserEvents1.LogIn
group UserEvents1.Day
Вышеупомянутый запрос выполнялся в течение 20 минут для моего фактического набора данных, прежде чем я отменил его. Любые мысли о том, как я могу упростить?