WITH t1 AS (
    SELECT *
    FROM tb_user_log
    WHERE artical_id != 0
),
t2 AS (
    SELECT uid,
           artical_id,
           in_time,
           1 AS uv
           FROM t1
    UNION ALL
    SELECT uid,
           artical_id,
           out_time,
           -1 AS uv
    FROM t1
),
t3 AS (
    SELECT
    artical_id,
    in_time,
    uv,
    sum(uv) OVER (PARTITION BY artical_id ORDER BY in_time ASC,uv DESC ) AS sum_uv
    FROM t2
),
t4 AS (
    SELECT artical_id,
           max(sum_uv) AS max_uv
    FROM t3
    GROUP BY artical_id
    ORDER BY max_uv DESC
)
SELECT * FROM t4;

# 核心在于同时进入和同时出去时,需要先加后减!