WITH t1 AS( SELECT city, SUM(uv) OVER(PARTITION BY city ORDER BY uv_time,uv DESC) AS uv_cnt #每个城市等车瞬时UV FROM ( SELECT city, event_time uv_time, 1 AS uv FROM tb_get_car_record #进入等车状态 UNION ALL SELECT city, end_time uv_time, -1 AS uv FROM tb_get_car_record WHERE order_id IS NULL #接单前取消 UNION ALL SELECT city, IFNULL(start_time,finish_time) uv_time, -1 AS uv FROM tb_get_car_order LEFT JOIN tb_get_car_record USING(order_id) #接单后取消或上车 )AS t WHERE DATE_FORMAT(uv_time,'%Y%m')='202110' #2021年10月 ) SELECT city, MAX(uv_cnt) max_wait_uv FROM t1 GROUP BY city ORDER BY max_wait_uv,city;#排序先按照uv升序,uv一样按照城市升序 # 这道题关键在于联想到实时统计uv的场景!