Mysql 考虑到以前的订阅日,如何获得每日活跃用户?
我正在使用MySQL对订户进行一些数据分析,我想整理一下自服务启动以来每天活跃的订户。 我有一个订阅表,如下所示Mysql 考虑到以前的订阅日,如何获得每日活跃用户?,mysql,sql,Mysql,Sql,我正在使用MySQL对订户进行一些数据分析,我想整理一下自服务启动以来每天活跃的订户。 我有一个订阅表,如下所示 id | subscriptiondate | unsubscriptiondate ---|------------------|-------------------- 1 | 2020-02-12 | null ---|------------------|-------------------- 2 | 2020-03-20 | 2020-04-0
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*
您可以取消拆分该表,并使用累计总和进行聚合:
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;
您可以取消拆分该表,并使用累计总和进行聚合:
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;