with rank_date as (
select user_id,date
,row_number() over(partition by user_id order by date) as rn
from login
),
first_date as (
select user_id,date as first_day
from rank_date
where rn=1
),
second_date as (
select fd.user_id
from first_date fd
join login l on l.user_id=fd.user_id
where date_add(first_day,interval 1 day)=date
)
select round(count(sd.user_id)*1.0/count(distinct fd.user_id),3) as p
from first_date fd
left join second_date sd on sd.user_id=fd.user_id;

京公网安备 11010502036488号