with new as (
    select user_id,min(date) nu
    from login
    group by user_id--找出新用户
), jg as (
select new.nu,lo.user_id,lo.client_id,lo.date da,datediff(lo.date,new.nu) df--输出时间间隔,这里0表示用户当天登录的日期行,1为次日登录的日期行,以此类推。。。。
,sum(if(datediff(lo.date,new.nu)=1,1,0))over(partition by user_id) dt--这里比较重要,在同一行输出一个值,1代表用户在次日登录了,0代表用户在次日未曾登录,将这个值放在时间间隔之后
from new join login lo on new.user_id=lo.user_id--将新用户表与原表内连接
)
select jg.da,round(if(sum(If(jg.df=0,1,0))=0,0.000,sum(if(jg.dt=1 and jg.df=0,1,0))/sum(If(jg.df=0,1,0))),3)--这里df=0表示要找到这个日期里是新用户的,df=0 and dt=1表示要找到这个日期的新用户是次日也登录过的
from jg
group by jg.da
order by jg.da;