好经典的题,第一次接触也是没思路,看了置顶回答才恍然大悟。自己再总结总结: ①某时间进入就记为1,某时间离开就记为-1,通过把时间点用±1进行编码得到可以累加的列; ②用窗口函数sum对id分组、根据时间序列和±1编码的先后排序、累加,那么任一时间点的瞬时人数就确定了 select artical_id, max(uv) max_uv from ( select artical_id, sum(diff)over(partition by artical_id order by a, diff desc) as uv from( select artical_id, in_time a, 1 diff from tb_user_log where artical_id !=0 union all select artical_id, out_time a, -1 diff from tb_user_log where artical_id !=0) as tb1 ) as tb2 group by artical_id order by max_uv desc