with t1 as (select artical_id,in_time dt,1 diff from tb_user_log where artical_id!=0 union all select artical_id,out_time dt,-1 diff from tb_user_log where artical_id!=0) select t2.artical_id,max(t2.cn) mx from (select artical_id, sum(diff) over(partition by artical_id order by dt,diff desc) cn from t1 ) t2 group by t2.artical_id order by mx desc;