第一步,因为要在满足日期、订单状态、课程类别的where筛选基础上进一步选出满足以上条件的最早日期和订单次数,所以需要通过窗口函数新增日期排序和订单次数字段,即
(SELECT user_id, date,
           COUNT(*) OVER (PARTITION BY user_id) AS r,
           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 a
第二步,在第一步基础上,对日期排序和订单次数字段进行where筛选,并对最终结果按order by user_id排序,即SELECT user_id,date as first_buy_date,a.r as cnt
from
(SELECT user_id, date,
           COUNT(*) OVER (PARTITION BY user_id) AS r,
           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 a
      where a.r>=2
      and a.rn=1
      order by user_id