with log as( select uid ,artical_id ,in_time dt ,1 is_in from tb_user_log where artical_id != 0 and artical_id != '0' union all select uid ,artical_id ,out_time dt ,-1 is_in from tb_user_log where artical_id != 0 and artical_id != '0' ) select artical_id ,max(uv) max_uv from ( select artical_id ,dt ,sum(is_in)over(partition by artical_id order by dt, is_in desc) uv from log ) a group by artical_id order by max_uv desc