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

SQL Server 2008编写UPDATE语句获取同分组上一行Year字段值咨询

解决方案

SQL Server 2008 不支持 2012 及以上版本才提供的LAG()窗口函数,我们可以通过 CTE(公用表表达式)+ 行号自连接 的方案实现需求,假设你的源表名为RefYearData,请替换为实际表名:

步骤1:新增PrevYear字段

先给源表新增用于存储上一年份的字段:

ALTER TABLE RefYearData 
ADD PrevYear INT NULL;

步骤2:更新PrevYear字段值

先通过CTE给每个refNumber分组内的记录按Year升序排序生成行号,再通过自关联匹配上一行的Year值完成更新:

WITH RankedData AS (
    SELECT 
        refNumber,
        Year,
        -- 按refNumber分组,分组内按Year升序生成连续行号
        ROW_NUMBER() OVER (PARTITION BY refNumber ORDER BY Year ASC) AS RowNum
    FROM RefYearData
)
UPDATE t1
SET t1.PrevYear = t2.Year
FROM RefYearData t1
INNER JOIN RankedData r1 
    ON t1.refNumber = r1.refNumber AND t1.Year = r1.Year
-- 匹配同分组内、行号比当前行小1的上一行记录
LEFT JOIN RankedData r2
    ON r1.refNumber = r2.refNumber AND r1.RowNum = r2.RowNum + 1;

补充说明:如果存在同一个refNumber下有多个相同Year的记录,可以调整ROW_NUMBER()的排序规则,增加其他唯一字段作为排序条件,避免行号重复。

验证结果

更新完成后执行查询即可得到预期效果:

SELECT refNumber, Year, PrevYear FROM RefYearData ORDER BY refNumber, Year;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03