题目需求
通过商品信息表 (sku_info
)、订单信息表 (order_info
)、订单明细表 (order_detail
),分析如果有一个用户成功下单两个及两个以上的购买成功的手机订单(购买商品为 xiaomi 10
、apple 12
、小米13
)那么输出这个用户的 id 及第一次成功购买手机的日期和最后一次成功购买手机的日期,以及购买手机成功的次数。
期望结果如下:
user_id (用户ID) | first_date (首次时间) | last_date (末次时间) | cn (购买次数) |
---|---|---|---|
101 | 2024-09-27 | 2024-09-28 | 3 |
102 | 2024-10-08 | 2024-10-08 | 2 |
103 | 2024-10-01 | 2024-10-03 | 3 |
104 | 2024-10-02 | 2024-10-03 | 3 |
105 | 2024-10-05 | 2024-10-05 | 3 |
106 | 2024-10-06 | 2024-10-06 | 2 |
107 | 2024-10-07 | 2024-10-07 | 3 |
需要用到的表:
订单信息表:order_info
order_id (订单ID) | user_id (用户ID) | create_date (下单日期) | total_amount (订单金额) |
---|---|---|---|
1 | 101 | 2024-09-30 | 25000.00 |
3 | 103 | 2023-10-02 | 26000.00 |
订单明细表:order_detail
order_detail_id (订单明细ID) | order_id (订单ID) | sku_id (商品ID) | create_date (下单日期) | price (商品单价) | sku_num (商品件数) |
---|---|---|---|---|---|
1 | 2 | 1 | 2024-09-30 | 2000.00 | 2 |
3 | 2 | 3 | 2024-09-30 | 5000.00 | 5 |
20 | 10 | 4 | 2023-10-02 | 6000.00 | 1 |
25 | 10 | 7 | 2023-10-02 | 500.00 | 24 |
29 | 10 | 8 | 2023-10-02 | 2000.00 | 5 |
商品信息表:sku_info
sku_id (商品ID) | name (商品名称) | category_id (分类ID) | from_date (上架日期) | price (商品价格) |
---|---|---|---|---|
1 | xiaomi 10 | 1 | 2024-01-01 | 3000.00 |
3 | 洗碗机 | 2 | 2024-02-01 | 4000.00 |
4 | 自行车 | 3 | 2024-01-01 | 5000.00 |
select distinct oi.user_id,
first_value(od.create_date)
over (partition by oi.user_id order by od.create_date rows between unbounded preceding and unbounded following ) first_date,
last_value(od.create_date)
over (partition by oi.user_id order by od.create_date rows between unbounded preceding and unbounded following ) last_date,
count(*)
over (partition by oi.user_id order by od.create_date rows between unbounded preceding and unbounded following) cn
from order_info oi
join
order_detail od
on oi.order_id = od.order_id
join
sku_info si
on od.sku_id = si.sku_id
where si.name in ('xiaomi 10', 'apple 12', 'xiaomi 13')