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的场景!