select
t2.date,
case
when sum(t2.first_login) = 0
then 0.000
else
round(sum(case
when (t2.user_id,t2.add_day) in (select user_id,date from login) and t2.first_login = 1
then 1
else 0
end)/sum(t2.first_login),3)
end p
from
(select
*,
case
when (t1.user_id,t1.date) in (select user_id,min(date) from login group by user_id)
then 1
else 0
end first_login,
date_add(t1.date,interval 1 day) add_day
from
login t1
) t2
group by
t2.date
order by
t2.date

京公网安备 11010502036488号