You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL基于上一条记录的FromDate生成ToDate列?

基于上一条记录生成ToDate的SQL实现

需求明确:按ID分组,每个ID下的记录按FromDate从新到旧排序,每条记录的ToDate取下一条记录的FromDate减1天;最新的那条记录(排序后的第一条)ToDate固定设为'9999-12-31'。

样本数据集

ID| FromDate 
1 | 2022-02-08
1 | 2022-01-05
1 | 2022-01-02
2 | 2022-04-03
2 | 2022-01-07
2 | 2021-12-04

核心思路

利用窗口函数LEAD(),按ID分组、FromDate降序排序,获取当前记录的下一条记录的FromDate;对该日期做减1天处理,最后用COALESCE()将最新记录的NULL值替换为指定默认日期。

不同数据库的实现代码

MySQL/MariaDB

SELECT 
    ID,
    FromDate,
    COALESCE(DATE_SUB(LEAD(FromDate) OVER (PARTITION BY ID ORDER BY FromDate DESC), INTERVAL 1 DAY), '9999-12-31') AS ToDate
FROM your_table
ORDER BY ID, FromDate DESC;

PostgreSQL

SELECT 
    ID,
    FromDate,
    COALESCE(LEAD(FromDate) OVER (PARTITION BY ID ORDER BY FromDate DESC) - INTERVAL '1 day', '9999-12-31'::DATE) AS ToDate
FROM your_table
ORDER BY ID, FromDate DESC;

SQL Server

SELECT 
    ID,
    FromDate,
    COALESCE(DATEADD(DAY, -1, LEAD(FromDate) OVER (PARTITION BY ID ORDER BY FromDate DESC)), '9999-12-31') AS ToDate
FROM your_table
ORDER BY ID, FromDate DESC;

预期输出

ID| FromDate   | ToDate
1 | 2022-02-08 | 9999-12-31
1 | 2022-01-05 | 2022-02-07
1 | 2022-01-02 | 2022-01-04
2 | 2022-04-03 | 9999-12-31
2 | 2022-01-07 | 2022-04-02
2 | 2021-12-04 | 2022-01-06

内容的提问来源于stack exchange,提问作者sssooo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:36:31