You need to enable JavaScript to run this app. SQL Server 计算相邻行Record_Count字段百分比差值与方差咨询
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 计算相邻行Record_Count字段百分比差值与方差咨询

实现方案

你可以用SQL Server内置的LAG()窗口函数快速实现相邻行的数值对比,这是最简洁高效的实现方式,兼容SQL Server 2012及以上版本。

完整查询代码

WITH PreData AS (
    SELECT
        ID,
        Record_Count,
        -- 按ID升序取上一行的Record_Count值
        LAG(Record_Count, 1) OVER(ORDER BY ID ASC) AS Last_Record_Count
    FROM 你的实际表名 -- 替换为你自己的表名
)
SELECT
    ID,
    Record_Count,
    -- 计算百分比差值,处理空值和除零异常
    CASE
        WHEN Last_Record_Count IS NULL THEN NULL
        WHEN Last_Record_Count = 0 THEN NULL
        ELSE ROUND(CAST((Record_Count - Last_Record_Count) AS FLOAT) / Last_Record_Count * 100, 2)
    END AS Variance
FROM PreData
ORDER BY ID ASC;

示例数据运行结果

代入你给出的测试数据,查询结果如下:

IDRecord_CountVariance
26728464NULL
268548-98.07
269283615075.36
270543-98.09

低版本兼容方案

如果你使用的是SQL Server 2012之前的版本,可以用自连接实现相同逻辑:

SELECT
    t1.ID,
    t1.Record_Count,
    CASE
        WHEN t2.Record_Count IS NULL THEN NULL
        WHEN t2.Record_Count = 0 THEN NULL
        ELSE ROUND(CAST((t1.Record_Count - t2.Record_Count) AS FLOAT) / t2.Record_Count * 100, 2)
    END AS Variance
FROM 你的实际表名 t1
LEFT JOIN 你的实际表名 t2 ON t1.ID = t2.ID + 1
ORDER BY t1.ID ASC;

注意事项

  • 如果你的行排序逻辑不是按ID升序,只需要修改OVER()子句里的ORDER BY字段即可,比如按业务日期字段排序。
  • 你可以调整ROUND()函数的第二个参数修改百分比保留的小数位数,不需要保留小数可以直接去掉ROUND函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:33:00