SELECT 
    cr.route_name,
    cr.distance_km,
    t.rider_name,
    t.ride_date,
    t.completion_min,
    t.avg_speed_kmh
FROM cycling_routes cr
CROSS JOIN LATERAL (
    -- 对于当前路线 cr.route_id,计算个人最佳排行榜前2名
    SELECT 
        rider_name,
        ride_date,
        completion_min,
        avg_speed_kmh
    FROM (
        -- 为每个骑手找到个人最佳记录(用时最短,同用时取最早日期、最小ride_id)
        SELECT 
            rider_name,
            ride_date,
            completion_min,
            avg_speed_kmh,
            ride_id,
            ROW_NUMBER() OVER (
                PARTITION BY rider_name 
                ORDER BY completion_min ASC, ride_date ASC, ride_id ASC
            ) AS rn
        FROM ride_records
        WHERE route_id = cr.route_id   -- 只考虑当前路线的记录
    ) best
    WHERE rn = 1   -- 每个骑手的最佳
    ORDER BY completion_min ASC, ride_date ASC, ride_id ASC  -- 在所有最佳中排序
    LIMIT 2        -- 取前2名
) AS t
ORDER BY cr.route_id ASC, t.completion_min ASC, t.ride_date ASC;