select
a.user_id,
min(a.date) as first_buy_date,
max(a.date) as second_buy_date,
a.cnt
from
(select
user_id,
date,
rank() over(partition by user_id order by date) as rank_no,
count(*) over(partition by user_id) as cnt
from order_info
where date>='2025-10-16'
and status='completed'
and product_name in('C++','Java','Python')
) a
where a.rank_no<=2 and a.cnt>=2
group by a.user_id
order by a.user_id ;