我的开窗函数编写+参考别人,开窗函数主要有排序和count另种
with t as( select user_id, date, -- 得到满足条件的按照user_id排列的商量 count(*) over(partition by user_id ) as cnum, dense_rank() over(partition by user_id order by date) as srank # 注意这里开窗函数是order by date from order_info where status='completed' and date>='2025-10-15' and product_name in ('C++', "Java", 'Python') ) select t.user_id, min(date), max(date), t.cnum from t where t.srank<=2 and t.cnum>=2 -- 只找出每个订单的前两位! group by user_id order by user_id
网上第二种:在select里查询
WITH order_new AS( SELECT * FROM order_info o WHERE date > '2025-10-15' AND product_name IN ('C++', 'Java', 'Python') AND status = 'completed' ) SELECT user_id, MIN(date) AS first_buy_date, (SELECT date -- 自连接找出 FROM order_new WHERE user_id = o.user_id ORDER BY date LIMIT 1, 1) AS second_buy_date, -- 找出第二高的日期,靠limit来 COUNT(i