#题目的关键在这句:如果同一时刻有进入也有离开时,先记录用户数增加再记录减少
SELECT artical_id,MAX(MAX_V) AS max_uv
FROM (
select artical_id,(
sum(#每个开始时间段和所有时间段对比,在相同时间段的+1
if((checkt_in>=time_rang1 and checkt_in<=time_rang2),1,0)
)+
sum(#如果结束时间刚好是其他人开始的时间段则-1
if(checktime_out=time_rang1,-1,0)
)) as MAX_V
from
(
select t1.artical_id ,t1.uid,
t1.in_time as checkt_in,t1.out_time as checktime_out,
t2.in_time as time_rang1,t2.out_time as time_rang2
from tb_user_log t1,tb_user_log t2
where t1.artical_id=t2.artical_id and t1.artical_id <> 0
order by t1.artical_id,t1.in_time
)t
group by artical_id,uid
)T2
group by artical_id
ORDER BY max_uv DESC