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

如何用LAG()函数生成含后续年份行的前值列?

解决方法说明

直接用lag(value) OVER(order by Year)得不到2024行的核心原因是原数据表中根本没有2024年的记录,LAG函数只能基于现有行做偏移计算,没法自动生成新行。要实现需求,得先补全年份序列,再关联原数据计算偏移值,步骤如下:

步骤1:生成包含目标年份的连续序列

首先需要构造包含2022、2023、2024的年份列表,不同数据库的实现方式略有差异:

通用递归CTE写法(适用于MySQL 8.0+、SQL Server、PostgreSQL等支持CTE的数据库)

WITH year_series AS (
    SELECT 2022 AS Year
    UNION ALL
    SELECT Year + 1 FROM year_series WHERE Year < 2024
)

PostgreSQL 专属写法

SELECT generate_series(2022, 2024) AS Year

步骤2:关联原数据并计算上年值

将生成的年份序列与原数据表左连接,再用LAG函数计算Value_PY:

WITH year_series AS (
    SELECT 2022 AS Year
    UNION ALL
    SELECT Year + 1 FROM year_series WHERE Year < 2024
)
SELECT 
    ys.Year,
    t.Value,
    LAG(t.Value) OVER(ORDER BY ys.Year) AS Value_PY
FROM year_series ys
LEFT JOIN your_table t ON ys.Year = t.Year
ORDER BY ys.Year;

执行这段SQL后,就能得到你期望的结果:

YearValueValue_PY
20221000null
20235001000
2024null500

关键说明

不需要给LAG函数额外添加参数,问题的核心是先补全缺失的年份行,让2024年出现在结果集中,之后LAG函数才能正常计算它的上年值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:20