select m.date,
round((case
when(n.l is not null) then n.l/m.z
else 0
end ) ,3) as p
from
(select t.date, sum(case ranking when 1 then 1 else 0 end) as z
from (
select *, dense_rank()over(partition by user_id order by date) as ranking
from login) t
group by t.date) m
left join
(select date_add(date,interval -1 day) as date,count(distinct user_id) as l
from login
where (user_id,date) in
(select user_id, date_add(min(date),interval 1 day)
from login
group by user_id)
group by date) n
using (date)

京公网安备 11010502036488号