Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 考虑到以前的订阅日,如何获得每日活跃用户?_Mysql_Sql - Fatal编程技术网

Mysql 考虑到以前的订阅日,如何获得每日活跃用户?

Mysql 考虑到以前的订阅日,如何获得每日活跃用户?,mysql,sql,Mysql,Sql,我正在使用MySQL对订户进行一些数据分析,我想整理一下自服务启动以来每天活跃的订户。 我有一个订阅表,如下所示 id | subscriptiondate | unsubscriptiondate ---|------------------|-------------------- 1 | 2020-02-12 | null ---|------------------|-------------------- 2 | 2020-03-20 | 2020-04-0

我正在使用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*

您可以取消拆分该表,并使用累计总和进行聚合:

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;