首先能够想到的大概思路是:

  1. 找出新用户登录的第一天==>就是最小日期
  2. 找出新用户是否存在第二天的记录==> 最小日期+1 Day
  3. 进行相除 ==> COUNT(最小日期+1 Day) / COUNT(最小日期)
  4. 题目要求3位小数 3位之后进行四舍五入 用ROUND(X,Y) x为value,y为保留小数
SELECT ROUND(COUNT(1)/(SELECT COUNT(1)
FROM(
SELECT user_id,min(date) AS date
FROM login
GROUP BY
user_id
)a)
,3) AS p
FROM
login l,
(
-- 求最小日期
SELECT user_id,min(date) AS date
FROM login
GROUP BY
user_id
)a
WHERE
l.user_id = a.user_id
AND
-- 求最小日期+1 day
l.date = DATE_ADD(a.date,INTERVAL 1 DAY)