select
round(count(distinct b.user_id)/count(*),3) as p
from
        (select
        user_id            #第一次登录用户
        ,min(date)
        from login
        group by 1
        ) a
left join
        (select
        user_id
        ,date
        from
        login l
        where
            (user_id,date) in
                    (select
                     user_id
                    ,date_add(min(date),interval 1 day)
                    from login
                    group by 1)
        ) b
using(user_id);