SQL第1次和第2次购买的日期

:order_info
字段:order_id user_id create_date
:order_detail
字段:order_id sku_id create_date sku_num
:sku_info
字段:sku_id name

需求: 一个用户成功下单>=2次的手机订单(xiaomi 10 , apple 12 ,小米 13) 那么输出 第一次和第二次成功购买的日期,以及购买手机成功次数

-- 方法一
select 
 user_id
 ,if(num = 1,create_date,'9999-01-01') start_date
 ,if(num = 2,create_date,'9999-01-01') end_date
 ,sum(order_ct) over(partition by user_id) sorder
 
 from (
    select 
     user_id,create_date,order_ct,row_number() over(partition by user_id order by create_date) num 
     from (
        select  user_id,create_date,count(t1.order_id) order_ct from order_info t1 
         join order_detail t2 on t1.order_id = t2.order_id
         join sku_info t3 on t2.sku_id = t3.sku_id
        where t3.name in ('xiaomi 10','apple 12','小米 13')
        group by user_id,create_date 
    ) a 
) b where sorder >= 2


-- 方法二 

select 
 user_id
 ,create_date start_date
 ,nvl(afdate,create_date) end_date
 ,cn 
 
 from (
    select 
     user_id,create_date,order_ct
     -- 第一个
     ,row_number() over(partition by user_id order by create_date) num 
     -- 第二个
     ,lead(create_date,1,null) over(partition by user_id order by create_date) afdate
     ,sum(order_ct) over(partition by user_id) cn 
     from (
        select  user_id,create_date,count(t1.order_id) order_ct from order_info t1 
         join order_detail t2 on t1.order_id = t2.order_id
         join sku_info t3 on t2.sku_id = t3.sku_id
        where t3.name in ('xiaomi 10','apple 12','小米 13')
        group by user_id,create_date 
    ) a 
) b where num = 1 and cn >= 2

 

posted on 2025-06-23 11:33  北京的小乔  阅读(13)  评论(0)    收藏  举报