题解 | #每篇文章同一时刻最大在看人数#
每篇文章同一时刻最大在看人数
https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48
### 不好意思又是一篇照搬别人代码的行为。一开始我的思路出劈叉了,我想着通过先计算某个瞬时时刻,然后通过瞬时时刻分组计算每个时刻的进出总人数,再比较出每篇文章的最大进出总人数;参考了别人的写法之后,我顿悟了,将in_time 时间记作1,代表人数增加,将out_time记作-1,代表人数的减少,先统计所有时刻及对应的人数增加及减少,然后根据sum() over() 窗口函数统计每个截止时刻的进出总人数:sum(diff) over(partition by artical_id order by dt,diff desc)
### 每篇文章同一时刻最大在看人数
# 统计截止到每个时刻 每篇文章的在浏览人数
select artical_id,
max(sumUv) max_uv
from (
select artical_id,
dt ,
sum(diff) over(partition by artical_id order by dt,diff desc) sumUv # 每篇文章截止时间的进出总人数
from (
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
) A
) B group by B.artical_id order by max_uv desc ;


