如何在SQL查询中添加列获取客户上一条记录的record_id
编写SQL新增客户上一条记录ID字段
源表结构与数据
| customer_id | record_id | record_status | created_date | closed_date |
|---|---|---|---|---|
| 1000000 | WTLZSMV3RQ | Live | 15/02/2025 10:36:26 | |
| 1000001 | I8R6FPCOEH | Closed | 20/09/2024 03:11:22 | 13/12/2024 06:08:54 |
| 1000001 | ZRPLYWBR8C | Closed | 13/12/2024 10:11:10 | 07/03/2025 09:06:25 |
| 1000001 | 9HJT89GNJ3 | Live | 07/03/2025 13:08:42 | |
| 1000002 | ER5JF7TZ0Z | Live | 22/07/2024 22:05:17 | |
| 1000003 | 2SNSDMLXZ1 | Closed | 07/03/2024 13:04:33 | 03/12/2024 08:34:56 |
| 1000003 | VDNI7UWAUX | Live | 03/12/2024 22:19:39 |
期望查询结果
返回原表所有字段,并新增old_record_id列,填充对应客户的上一条记录ID(上一条记录指创建日期最接近当前记录创建日期的前序记录),无前置记录则为NULL:
| customer_id | record_id | record_status | created_date | closed_date | old_record_id |
|---|---|---|---|---|---|
| 1000000 | WTLZSMV3RQ | Live | 15/02/2025 10:36:26 | ||
| 1000001 | I8R6FPCOEH | Closed | 20/09/2024 03:11:22 | 13/12/2024 06:08:54 | |
| 1000001 | ZRPLYWBR8C | Closed | 13/12/2024 10:11:10 | 07/03/2025 09:06:25 | I8R6FPCOEH |
| 1000001 | 9HJT89GNJ3 | Live | 07/03/2025 13:08:42 | ZRPLYWBR8C | |
| 1000002 | ER5JF7TZ0Z | Live | 22/07/2024 22:05:17 | ||
| 1000003 | 2SNSDMLXZ1 | Closed | 07/03/2024 13:04:33 | 03/12/2024 08:34:56 | |
| 1000003 | VDNI7UWAUX | Live | 03/12/2024 22:19:39 | 2SNSDMLXZ1 |
解决方案SQL语句
使用窗口函数LAG(),按客户ID分组、创建日期排序,即可获取每条记录的上一条记录ID:
SELECT customer_id, record_id, record_status, created_date, closed_date, LAG(record_id) OVER (PARTITION BY customer_id ORDER BY created_date) AS old_record_id FROM your_table_name;
说明
PARTITION BY customer_id:按客户ID分组,确保仅在同一客户的记录范围内查找上一条记录ORDER BY created_date:按创建日期排序,保证取到的是创建时间最接近当前记录的前序记录LAG(record_id):返回分组内当前行的上一行的record_id,分组内第一行则返回NULL
内容的提问来源于stack exchange,提问作者alexei7
相关产品推荐
相关产品推荐

