SELECT user_id, MIN(date), MAX(date), cnt
FROM(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY date) rk,
COUNT(*) OVER(PARTITION BY user_id) cnt
FROM order_info
WHERE status = 'completed' AND date > '2025-10-15'
AND product_name IN ('C++', 'JAVA', 'Python')
)t1
WHERE rk <= 2 AND cnt >= 2
GROUP BY user_id
ORDER BY user_id
在子查询中使用两次窗口函数,第一次使用ROW_NUMBER(),目的为提取出前两次的购买记录,则date的最小值对应第一次购买,最大值对应第二次购买;第二次使用COUNT(*),目的为筛选出总购买次数在两次以上的记录。

京公网安备 11010502036488号