【京东】查询每位顾客最近一笔订单
WHERE 条件JOIN 连接子查询窗口函数ORDER BY用户行为分析面试真题
题目描述
来源:京东 SQL 面试真题
某电商平台使用订单表和顾客表存储交易信息。现在需要使用窗口函数和表联结,查询每位有下单记录的顾客最近一笔订单。
数据表
orders 订单表
| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | BIGINT | 订单编号,主键 |
| customer_id | BIGINT | 顾客 ID |
| order_date | DATETIME | 下单时间 |
customers 顾客表
| 字段 | 类型 | 说明 |
|---|---|---|
| customer_id | BIGINT | 顾客 ID,主键 |
| customer_name | VARCHAR | 顾客名称 |
最近订单口径
- 在每位顾客自己的订单中,按
order_date降序选取最近一笔。 - 同一顾客多笔订单的下单时间完全相同时,取
order_id更大的订单。 - 没有下单记录的顾客不输出。
题目要求
- 必须使用窗口函数和表联结。
- 输出订单编号、顾客名称和最近下单日期。
- 最终按
customer_id升序展示。
期望输出列
| 列名 | 说明 |
|---|---|
| order_id | 最近一笔订单的编号 |
| customer_name | 顾客名称 |
| order_date | 最近下单时间 |
数据样例
| order_idPKBIGINT | customer_idBIGINT | order_dateDATETIME |
|---|---|---|
| 1 | 101 | 2023-07-01 10:00:00 |
| 2 | 102 | 2023-07-02 11:30:00 |
| 3 | 101 | 2023-07-03 15:45:00 |
| 4 | 103 | 2023-07-04 09:20:00 |
| 5 | 102 | 2023-07-05 14:10:00 |
输入数据显示 5 / 5 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里