SELECT
l.date,
round(ifnull(sum((m.user_id,date_add(m.min_date,interval 1 day)) in
(select user_id,date from login))/count(m.user_id),0),3) p
# 计算第2天登录的次数/第一天登录次数。
FROM login l
LEFT JOIN
(
SELECT user_id,
min(date) min_date
FROM login
GROUP BY user_id
) m
ON l.user_id=m.user_id
and l.date=min_date
GROUP BY l.date
order by l.date
;
#-------------------------------------------------------------------------------
# 利用窗口函数计算比较简单
select date,
round(ifnull(sum(datediff(l_date,date)=1)/sum(date=f_date),0),3) p
from(
select *,
FIRST_VALUE(date)over(partition by user_id order by date) f_date,
lead(date,1)over(partition by user_id order by date) l_date
from login
) f
group by date
;