with
t1 as(
select
user_id,
product_name,
status,
date,
count(status)over(partition by user_id) as counts
from
order_info
where
status='completed'
and
product_name in ('C++','Java','Python')
and
timestampdiff(day,'2025-10-15',date)>0
),
t2 as(
select distinct
user_id
from
t1
where
counts>=2
order by
user_id
)
select
*
from
order_info
where
exists (select 1 from t2 where t2.user_id = order_info.user_id)
and
status='completed'
and
product_name in ('C++','Java','Python')
and
timestampdiff(day,'2025-10-15',date)>0
order by
id