第一步通过窗口函数生成日期升序的字段rn和用户买课次数的字段 cnt,其余条件直接用where筛选,即 (
    SELECT 
        user_id, 
        date,
        COUNT(*) OVER (PARTITION BY user_id) AS cnt,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS rn
    FROM 
        order_info
    WHERE 
        date > '2025-10-15'
        AND status = 'completed'
        AND product_name IN ('C++', 'Python', 'Java')
) as RankedOrders
第二步在此基础上通过case when函数筛选出日期排名第一和第二的结果并分别命名first_buy_date,second_buy_date,且用where函数选出2次以上买课并最后用user_id排序,即
SELECT 
    user_id, 
    MIN(CASE WHEN rn = 1 THEN date END) AS first_buy_date,
    MIN(CASE WHEN rn = 2 THEN date END) AS second_buy_date,
    cnt
FROM (
    SELECT 
        user_id, 
        date,
        COUNT(*) OVER (PARTITION BY user_id) AS cnt,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS rn
    FROM 
        order_info
    WHERE 
        date > '2025-10-15'
        AND status = 'completed'
        AND product_name IN ('C++', 'Python', 'Java')
) as RankedOrders
WHERE 
    cnt >= 2
GROUP BY 
    user_id;