SELECT cid, ROUND(MAX(peak_uv),3) as max_peak_uv FROM ( SELECT cid, SUM(tag) over(partition by cid ORDER BY time) as peak_uv FROM ( SELECT cid, start_time as time, 1 as tag FROM play_record_tb union all SELECT cid, end_time as time, -1 as tag FROM play_record_tb ) a ) b GROUP BY cid ORDER BY max_peak_uv DESC LIMIT 3
- 窗口函数SUM(),从分区开头一直累加到当前行
- UNION ALL 是把多条 SELECT 语句结果简单地“拼在一起”——得到的结果集保留所有行(包括重复行),并且各列数和列顺序必须一致。UNION会去重。