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

如何在SQL Server中获取跨行结果?实现上一行日期映射至当前行

嗨,这个需求用窗口函数就能轻松解决!我帮你写好对应的SQL语句,还会给你解释清楚逻辑,以及兼容旧数据库的写法~

核心解决方案:使用LAG()窗口函数

现在绝大多数主流数据库(比如PostgreSQL、MySQL 8.0+、SQL Server、Oracle等)都支持窗口函数,LAG()就是专门用来获取当前行之前指定偏移量的行的字段值,正好匹配你的需求。

假设你的表名叫your_table(记得替换成你实际的表名),SQL语句如下:

SELECT 
    ID,
    Date,
    LAG(Date) OVER (ORDER BY ID) AS PreDate
FROM your_table;

关键逻辑说明:

  • LAG(Date):表示取当前行的前一行的Date值,第一行没有前一行,所以会返回NULL,完全符合你要的结果。
  • OVER (ORDER BY ID):这里指定了排序规则——因为你的原始数据里ID是递增的,日期也同步递增,所以按ID排序没问题;如果你的数据里ID和日期不一定同步,也可以改成ORDER BY Date,保证按日期顺序取上一行的值。
兼容旧版本数据库的写法(比如MySQL 5.7及以前)

如果你的数据库不支持窗口函数,那可以用用户变量来实现同样的效果:

SELECT 
    ID,
    Date,
    @prev_date AS PreDate,
    @prev_date := Date
FROM your_table, (SELECT @prev_date := NULL) AS init_var
ORDER BY ID;

验证结果

执行上面的语句后,就能得到你想要的输出:

ID Date PreDate

2 2017/3/15 NULL
3 2017/6/20 2017/3/15
5 2017/7/8 2017/6/20
6 2018/1/3 2017/7/8
7 2018/1/8 2018/1/3
10 2018/2/20 2018/1/8
11 2018/3/20 2018/2/20
12 2018/4/1 2018/3/20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:36