思路:问题关键点在于怎么求出次日,及成功率

  1. 求出次日的方法已经在题目中给出了,即DATE_ADD(yyyy-mm-dd,INTERVAL 1 DAY)

  2. 求用户第一次登录的方法是使用min(date),然后结合DATA_ADD函数求出用户次日登录的结果。

select user_id, DATE_ADD(min(date), INTERVAL 1 DAY)
from login
group by user_id
  1. 最后将次日登录的用户/总用户即可得出结果 求总用户很简单,可以使用distinct或group by都可以,这里使用 distinct
select count(distinct user_id) from login
  1. 完整代码如下(MySQL):
select round(count(distinct user_id) / (select count(distinct user_id) from login), 3)
from login
where (user_id, date) in (select user_id, DATE_ADD(min(date),INTERVAL 1 DAY)
													from login
													group by user_id)
  1. sqlite 方法:
select 
round(count(distinct user_id) * 1.0 / (select count(distinct user_id) from login) ,3)
from login
where (user_id,date)
in (select user_id,date(min(date),'+1 day') from login group by user_id);