SELECT user_id, MIN(date), MAX(date), cnt
FROM(
    SELECT *,
        ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY date) rk,
        COUNT(*) OVER(PARTITION BY user_id) cnt
    FROM order_info
    WHERE status = 'completed' AND date > '2025-10-15' 
        AND product_name IN ('C++', 'JAVA', 'Python')
)t1
WHERE rk <= 2 AND cnt >= 2
GROUP BY user_id
ORDER BY user_id

在子查询中使用两次窗口函数,第一次使用ROW_NUMBER(),目的为提取出前两次的购买记录,则date的最小值对应第一次购买,最大值对应第二次购买;第二次使用COUNT(*),目的为筛选出总购买次数在两次以上的记录。