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