with ranked as (select *, row_number() over (partition by user_id order by date) as rn, count(*) over (partition by user_id) as cnt from order_info
where date >= '2025-10-15' and status = 'completed' and (product_name = 'Python' or product_name = 'C++' or product_name = 'Java'))

select user_id, date as first_buy_date, cnt
from ranked
where rn = 1 and cnt >= 2 
order by user_id