with t3 as(
select
t1.*,
dense_rank() over(partition by t1.user_id order by t1.date asc) as dtrank
from order_info t1
inner join
(select user_id
from order_info
where
status='completed'
and product_name in('C++','Java','Python')
and date>'2025-10-15'
group by user_id
having count(id)>=2) t2
on t1.user_id=t2.user_id
where
t1.status='completed'
and t1.product_name in('C++','Java','Python')
and t1.date>'2025-10-15')
select
user_id,
max(case when dtrank=1 then date else 0 end) as first_buy_date,
max(case when dtrank=2 then date else 0 end) as second_buy_date,
count(id) as cnt
from t3
group by user_id
order by user_id