-- 选择用户 ID、首次购买日期、第二次购买日期和购买次数
select user_id, min(date) as first_buy_date, min(next_dt) as second_buy_date, max(cnt) as cnt
from (
-- 子查询,从订单信息表中选择特定条件的数据,并计算行号和下一个订单日期
select *,
-- 按照用户 ID 分区,根据日期排序,为每个用户的订单分配序号
row_number() over(partition by user_id order by date) as cnt,
-- 按照用户 ID 分区,根据日期排序,获取当前订单下一个订单的日期
lead(date,1) over(partition by user_id order by date) as next_dt
from order_info
-- 筛选条件:日期大于 2025-10-15,状态为已完成,产品名称为 Python、Java 或 C++
where date>'2025-10-15' and status='completed' and product_name in ('python','java','c++')
-- 按照用户 ID 排序
order by user_id
) as t
-- 按照用户 ID 分组
group by user_id
-- 筛选条件:分组后的记录数至少为 2
having count(*) >= 2;