select a0.date, ifnull(round(count(b.date)/count(a.date),3),0) # 如果为空,设置为0 from ( # 所有日期 select date from login group by date ) a0 left join ( # 每个用户做为新用户的日期 select user_id, min(date) date from login group by user_id ) a on a0.date = a.date left join ( # 每个用户的所有登陆日期 select user_id, date from login order by user_id ) b on a.user_id = b.user_id and a.date = date_sub(b.date, interval 1 day) group by a0.date
新的更好理解的思路



京公网安备 11010502036488号