次日留存率=在第一天登录后第二天还登录的人数/第一天登录的人数
第一种
select round( count(distinct l1.user_id)/( select count(distinct user_id) from login) , 3) from login l1 inner join ( select user_id, min(date) as date -- 找出第一次时间 from login group by user_id ) l2 on l1.user_id=l2.user_id and l1.date=DATE_ADD(l2.date, INTERVAL 1 DAY) -- 次日时间
第二种:
select round( count(distinct l1.user_id) / t.cnt_total, 3 ) from login l1 inner join login l2 on l1.user_id=l2.user_id and date(l2.date)-date(l1.date)=1 -- 间隔一天的日期 inner join ( select count(distinct user_id) as cnt_total -- 找到首次访问的人数 from login ) as t