题解 | #每篇文章同一时刻最大在看人数#

每篇文章同一时刻最大在看人数

https://www.nowcoder.com/practice/fe24c93008b84e9592b35faa15755e48

-- “同一时刻有进入有离开时,先记录增加后记录减少” ,进入+1,退出-1,可以使用sum窗口函数,对文章进行分组,然后先日期升序,再对人数进行降序排列
select 
artical_id 
,max(uv) as max_uv 
from (
-- 使用sum窗口函数,根据文章id进行分组,对dt进行升序排列,计算对应的diff值 
select 
artical_id 
,sum(diff) over(partition by artical_id order by dt,diff desc) as uv 
from (
-- 先计算uid对应的进入时间和离开时间,并且进入+1.离开-1 
select 
artical_id
,in_time as dt 
,1 as diff 
from 
tb_user_log 
where 
artical_id <> 0 
union all
select 
artical_id
,out_time as dt 
,-1 as diff 
from 
tb_user_log 
where 
artical_id <> 0 ) a ) b 
group by artical_id 
order by 2 desc 


全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务