select cid, pv, rk from( select cid, max(release_date) as release_date, round(count(*)*1.0,3) as pv, row_number() over (order by count(*) desc, max(release_date) desc) as rk from play_record_tb left join course_info_tb using(cid) group by cid, uid having count(*) >1 ) t where rk < 4 order by rk