#方法一:成功了
#思路:1、找出用户名和他的第一次登录日期,计算出理论上的第二次登陆日期
# 2、找出用户名和他实际的第二次登陆日期
# 3、第一步左连接第二步,链接条件:“用户名相等”和“第一步的2次理论登录=第二步的2次实际登录”
# 4、计算
#select round(count(distinct t2.user_id)/count(t1.user_id),3)
#from
#(
#select user_id,
# min(date),
# date_add(min(date),interval 1 day) as min2
# from
#login
#group by user_id
# ) t1
#left outer join
#(
#select user_id ,
# min(date) min3
# from login
# where (user_id,date) not in (select user_id,min(date) from login group by user_id)
# group by user_id
#) t2
#on t1.user_id=t2.user_id and t1.min2=t2.min3
#方法二:也成功了
#思路:1、先找用户名和第一次登录的日期 2、再找用户名和他的第二次登录日期 3、第一步左连接第二步 4、计算
select
round(count(d2)/count(d1),3) p
from
(
select user_id,
min(date) d1
from login
group by user_id
)b
left outer join
############################
#此处为找用户名和他的第二次登录日期#
(
select user_id,date d2
from
login
where (user_id,date) in
(#这里是理论上的用户第二次登录日期,表里不一定有,所以才需要在外面查询一次
select user_id,
date_add(min(date),interval 1 day)
from login
group by user_id
#
)
) c
############################
on b.user_id=c.user_id