个人感觉十分的简洁
select round(sum(p1)/count(distinct user_id),3) p
from (
select *,if(date=date_add(d1,interval 1 day),1,0) p1
from (select *,first_value(date)over(partition by user_id order by date) d1
from login) lo1
) lo2;