首先能够想到的大概思路是:
- 找出新用户登录的第一天==>就是最小日期
- 找出新用户是否存在第二天的记录==> 最小日期+1 Day
- 进行相除 ==> COUNT(最小日期+1 Day) / COUNT(最小日期)
- 题目要求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)