如何为orders表生成客户订单的序号列?
生成客户订单序列编号
可以使用SQL的窗口函数ROW_NUMBER()来实现这个需求,该函数会在指定分组内按排序规则生成递增序号。
实现代码
SELECT id, customer_id, created_at, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at) AS `order number` FROM orders;
代码说明
PARTITION BY customer_id:按客户ID对数据分组,每个客户的订单单独计算序号ORDER BY created_at:在每个客户分组内,按订单创建时间排序,保证序号跟随订单生成顺序递增ROW_NUMBER():为每个分组内的行生成从1开始的连续序号
原订单表数据
| id | customer_id | created_at |
|---|---|---|
| 1 | 1 | 2022-09-01 |
| 2 | 2 | 2022-09-02 |
| 3 | 1 | 2022-09-03 |
| 4 | 1 | 2022-09-04 |
| 5 | 2 | 2022-09-04 |
执行结果
| id | customer_id | created_at | order number |
|---|---|---|---|
| 1 | 1 | 2022-09-01 | 1 |
| 2 | 2 | 2022-09-02 | 1 |
| 3 | 1 | 2022-09-03 | 2 |
| 4 | 1 | 2022-09-04 | 3 |
| 5 | 2 | 2022-09-05 | 2 |
内容的提问来源于stack exchange,提问作者Sumsar
相关产品推荐
相关产品推荐

