WITH sq AS ( SELECT user_id, date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS rk, COUNT(*) OVER (PARTITION BY user_id) AS cnt FROM order_info WHERE date > '2025-10-15' AND status = 'completed' AND product_name IN ('C++', 'Java', 'Python') ) SELECT user_id, MIN(CASE WHEN rk = 1 THEN date END) AS first_buy_date, MIN(CASE WHEN rk = 2 THEN date END) AS second_buy_date, cnt FROM sq WHERE cnt >= 2 GROUP BY user_id ORDER BY user_id;