#需求:统计每篇文章同一时刻最大在看人数;同一时刻有进入也有离开时,先记录用户数增加再记录减少
#输出:文章ID、最大瞬时观看人数
#要求:max_uv降序;artical_id<>0;
#特殊点:同一时刻有进入也有离开时,先记录用户数增加再记录减少
#思路:计算瞬时情况的需求,对用户进入和离开的时间编码+union;编码后得到的观看人数进行开窗求max
select artical_id,max(ck1) max_uv
from(
  select artical_id,sum(tt2)over(partition by artical_id order by tt1,tt2 desc) ck1
  #这里满足‘先记录用户数增加再记录减少’的需求;
  #假设现在是3,然后加一减一就是先4后3,这样记录到最大的值是4;如果减一加一,就是先2后3,记录到最大的值是3,得到的结果就不一致
  from(
    select artical_id,in_time tt1,1 tt2 from tb_user_log where artical_id<>0
    union all
    #不做去重,因为可能存在进入时间与离开时间相一致到秒的情况
    select artical_id,out_time tt1,-1 tt2 from tb_user_log where artical_id<>0
  ) t1
) t2
group by 1
order by 2 desc