题目需求
从订单信息表(order_info)中查询出每个用户的最近三个下单日期的所有订单。
期望结果如下:
user_id | order_id | create_date |
---|---|---|
101 | 2 | 2021-09-28 |
101 | 3 | 2021-09-29 |
101 | 4 | 2021-09-30 |
… | … | … |
需要用到的表:
订单信息表:order_info
order_id (订单id) | user_id (用户id) | create_date (下单日期) | total_amount (订单金额) |
---|---|---|---|
1 | 101 | 2021-09-30 | 29000.00 |
10 | 103 | 2020-10-02 | 28000.00 |
实现一
-- 2) 求出每个用户最近三个下单日期的订单记录
select user_id,
order_id,
create_date
from (
select user_id,
order_id,
create_date,
-- 1) 计算 dense_rank() , 按照 user_id 分组,create_date 降序排序
-- 注: 此处不能用 rank(),因为 2021-06-01 的 rank_num 因该是 2
-- 说明 eg. create_date rank_num
-- 2021-06-05 1
-- 2021-06-05 1
-- 2021-06-01 3
-- 2021-06-01 3
dense_rank() over (partition by user_id order by create_date desc) as rank_num
from order_info
) t1
where rank_num <= 3;
题目来源
http://practice.atguigu.cn/#/question/20/desc?qType=SQL