select
cid,
round(cast(max(cnt) as float),3) as max_peak_uv
from(
select
a.cid,
sum(if(a.start_time between b.start_time and b.end_time,1,0)) as cnt
from play_record_tb a join play_record_tb b on a.cid=b.cid
group by a.id,a.cid,a.start_time
) t
group by cid
order by max_peak_uv desc
limit 3
1.自连接:将 play_record_tb 表与自身连接(a 和 b),条件是 a.cid = b.cid,确保只统计同一内容的播放记录。
统计并发:对于每条播放记录 a,检查其 start_time 是否落在其他记录 b 的播放时间段(b.start_time 到 b.end_time)内。如果是,则记为 1,否则记为 0。
分组:按 a.id、a.cid、a.start_time 分组,确保每条记录单独计算其开始时刻的并发数。

京公网安备 11010502036488号