SELECT artical_id, MAX(user_cnt) AS max_uv FROM( SELECT artical_id, SUM(cnt) OVER(PARTITION BY artical_id ORDER BY time, cnt DESC) AS user_cnt # 条件先记录增加 FROM( SELECT artical_id, in_time AS time, 1 AS cnt FROM tb_user_log WHERE artical_id != 0 UNION ALL # 一定得UNION ALL, UNION会自动去除重复行 SELECT artical_id, out_time AS time, -1 AS cnt FROM tb_user_log WHERE artical_id != 0 # 这个条件不明显 ) AS tb1 ) AS tb2 GROUP BY artical_id ORDER BY max_uv DESC # 条件降序 # 其余都挺简单的