select t1.date_1 date,ifnull(round(count(t3.user_id)*1.0/count(t2.user_id),3),0.000) p 
from
(select distinct date date_1 from login) t1 left join  
(select user_id,min(date) date_min from login group by user_id) t2 
on t1.date_1=t2.date_min left join login t3 on t2.user_id=t3.user_id and 
t3.date=date(t2.date_min,'+1 day') group by t1.date_1
#补充一个函数ifnull(expression1,expression2) ,这个函数的意思是如果expression1是null,则返回expression2,否则返回expression1.
#另外再加深一个函数的印象date函数date(date1,'+1 day'),sqlite没有datediff函数,也没有dateadd函数,所以借用了date函数。
#还要注意的一点就是:left join可以加条件的,也就是选择那些满足条件的进行连接,比如这道题就会选择时间等于最小值加一天的记录连接上就好了,这个是自己的理解盲点,导致问题迟迟没办法解决。
#注意分析问题时,找到主干,连接就好。本题思路就是先确定所有的日期,然后确定每个日期的新登录用户,再确定每个日期次日登陆用户,新登陆用户的选择就是日期最小值,次日登陆用户就是日期最小值加一。按日期进行连接,可以得到每天最新用户有哪些,然后再按用户id进行连接,就是看哪个用户有次日登陆记录,最后count(id)记录做除法就好。
#所以一定要找到一个起点,然后捋顺就好了。