通过代码

SELECT
    dt,
    tot dau,
    round((ifnull(new,0))/ tot,2) uv_new_ratio
FROM(SELECT
         count(uid) new,
         inttime
     FROM(SELECT
              uid,
              min(date(in_time)) inttime
          FROM
              tb_user_log
          group BY
              uid)a
     GROUP BY
         inttime) aa

        RIGHT JOIN(SELECT
                       count(uid) tot,
                       dt
                   FROM(SELECT
                            uid,
                            date(in_time) dt
                        FROM
                            tb_user_log
                        UNION
                        SELECT
                            uid,
                            date(out_time) dt
                        FROM
                            tb_user_log)b
                   GROUP BY
                       dt)bb
                  ON
                          aa.inttime = bb.dt
order BY
    bb.dt

思路

统计每天的日活数及新用户占比

注: 新用户占比=当天的新用户数÷当天活跃用户数(日活数)。 如果in_time-进入时间和out_time-离开时间跨天了,在两天里都记为该用户活跃过。 新用户占比保留2位小数,结果按日期升序排序。

,,之前这俩都写过

所以这里就简单一点直接上代码


1.每日新用户数目

SELECT
   count(uid) new,
   inttime
FROM(SELECT
        uid,
        min(date(in_time)) inttime
    FROM
        tb_user_log
    group BY
        uid)a
GROUP BY
   inttime

2.当天活跃用户数

SELECT
   count(uid) tot,
   dt
FROM(SELECT
        uid,
        date(in_time) dt
    FROM
        tb_user_log
    UNION
    SELECT
        uid,
        date(out_time) dt
    FROM
        tb_user_log)b
GROUP BY
   dt

以二表为主表进行连接,注意new可能是null,所以我们加一个ifnull判断

最后order以下结束