#明确问题:12号的新用户次留是指在12号是第一次登录,并且在13号也登录了。
#分母:当前日期新用户的特征是 当前日期=该用户所有登录日期的最小值
#分子:当前日期作为前一天有该用户的登录记录 并且是第一次登录。(代码中的-1是把某个用户在整张login表的日期-1,12号作为前一天有这个人,说明13号有这个人。)
【易错点】因为分母有可能为0,所以用ifnull(不为null时返回的值,为null时返回的值),这里指定为null时返回0;每天登录用户去个重,避免重复计算用户数(用with temp as 对login表去重或者sum case when ...改为count(distinct case when xxxxx then user_id else null end)。

with temp as(
    select user_id,date
    from login 
    group by user_id,date)

select date
        ,ifnull(round((sum(case when (user_id,date)in
            (select user_id,date_add(date,interval -1 day)
             from temp)  and (user_id,date)in (select user_id,min(date)from temp group by user_id)
            then 1 else 0 end))/
        (sum(case when (user_id,date)in
            (select user_id,min(date)from temp group by user_id)
            then 1 else 0 end)),3),0)as p
from temp
group by date
order by date;