#初版
select
a.user_id
,b.first_buy_date
,a.second_buy_date
,b.cnt
from
    (select  #求second_buy_date
    user_id
    ,date as second_buy_date
    from
        (select   #日期筛选排序
        user_id
        ,date
        ,row_number() over(partition by  user_id order by     date) as rn
        from
            order_info
        where
        product_name in('C++','Python','Java')
        and status='completed'
        and date >'2025-10-15')c
    where rn=2 )a 
    join
    (select     #求次数
    user_id
    ,min(date) as first_buy_date
    ,count(*) cnt
    from
        order_info
    where
    product_name in('C++','Python','Java')
    and status='completed'
    and date >'2025-10-15'
    group by 1) b
    on a.user_id=b.user_id
order by 1;

#优化
select
user_id
,max(if(rn=1,date,0)) as first_buy_date
,max(if(rn=2,date,0)) as second_buy_date
,cnt
from
    (select
    user_id
    ,date
    ,row_number() over(partition by  user_id order by date) as rn
    ,count(*)over(partition by user_id) as cnt
    from
        order_info
    where
    product_name in('C++','Python','Java')
    and status='completed'
    and date >'2025-10-15') a
where a.cnt>=2
group by 1,4