WITH temp AS ( # 记录进入,记为1 SELECT uid,artical_id,in_time line_time,1 uv FROM tb_user_log WHERE artical_id<>0 UNION ALL # 记录退出,记为-1 SELECT uid,artical_id,out_time line_time,-1 uv FROM tb_user_log WHERE artical_id<>0 ), temp1 as ( SELECT artical_id, SUM(uv) over(partition by artical_id order by line_time,uv desc) sum_uv FROM temp ) SELECT artical_id,Max(sum_uv) as max_uv FROM temp1 GROUP BY artical_id ORDER BY max_uv desc;
注意点:如果同一时刻有进入也有离开时,先记录用户数增加再记录减少 所以这里需要把人数也要进行排序,先加后减。