SQL
问题
查询在2025-10-15以后,如果有一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程,那么输出这个用户的user_id,以及满足前面条件的第一次购买成功的C++课程或Java课程或Python课程的日期first_buy_date,以及满足前面条件的第二次购买成功的C++课程或Java课程或Python课程的日期second_buy_date,以及购买成功的C++课程或Java课程或Python课程的次数cnt,并且输出结果按照user_id升序排序。
解题
1.问题拆解:先查询在2025-10-15以后,用户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程,输出用户的user_id。代码如下:
select user_id,date,r,cnt
from(
select user_id, date,
rank() over(partition by user_id order by date) r,
count(user_id) over(partition by user_id) cnt
from order_info
where status='completed'
and product_name in ('C++','Java','Python')
and date>'2025-10-15'
) as t
where cnt>=2)
查询结果如下:
2.将r=1的日期设置为first_buy_dat