Как получить ежедневно активных пользователей с учетом предыдущих дней подписки? - PullRequest
1 голос
/ 01 мая 2020

Я использую MySQL, чтобы провести некоторый анализ данных о подписчиках, и я хотел бы отсортировать ежедневных активных подписчиков с момента запуска услуги. У меня есть таблица подписки, как показано ниже

id | subscriptiondate | unsubscriptiondate
---|------------------|--------------------
1  | 2020-02-12       | null
---|------------------|--------------------
2  | 2020-03-20       | 2020-04-01
---|------------------|--------------------
3  | 2020-03-10       | null
---|------------------|--------------------
4  |2020-04-02        | null

, и я ожидаю такой результат:

date       | active_user
-----------|---------------------------
2020-02-12 | 1
-----------|------------------
2020-03-10 | 2
-----------|------------------
2020-03-20 | 3
-----------|------------------
2020-04-02 | 3

Подписчик отказался от 2020-04-01, поэтому у нас есть 3 активных подписчики 2020-04-02.

вот мой SQL сценарий, кто-нибудь может проверить и помочь мне в достижении моей цели?

SELECT
    COUNT(distinct is) AS active_user,
    date(subscriptiondate) as day
FROM
    subscriptions
WHERE
        subscriptiondate in (select subscriptiondate  from subscriptions where subscriptiondate <=date(subscriptiondate))
    AND (unsubscriptiondate is NULL or unsubscriptiondate>date(subscriptiondate))
GROUP BY
    day
ORDER BY day ASC*

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете «разворачивать» таблицу и агрегировать с накопленной суммой:

select date, sum(inc) as change_on_date,
       sum(sum(inc)) over (order by date) as active_on_day
from ((select subscriptiondate as date, 1 as inc from subscriptions
      ) union all
      (select unsubscriptiondate, -1 from subscriptions
      )
     ) s
group by date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...