WITH sq AS (
    SELECT
        user_id,
        date,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS rk,
        COUNT(*) OVER (PARTITION BY user_id) AS cnt
    FROM
        order_info
    WHERE
        date > '2025-10-15'
        AND status = 'completed'
        AND product_name IN ('C++', 'Java', 'Python')
)
SELECT
    user_id,
    MIN(CASE WHEN rk = 1 THEN date END) AS first_buy_date,
    MIN(CASE WHEN rk = 2 THEN date END) AS second_buy_date,
    cnt
FROM
    sq
WHERE
    cnt >= 2
GROUP BY
    user_id
ORDER BY
    user_id;