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

SQL Server 2012中同一ID多行VAL值增量计算问询

计算每个ID的VAL值增量(SQL Server 2012)

先把你的原始数据整理成更清晰的表格形式:

IDVALTime
212015-05-09 12:54:39
3102015-05-09 12:54:39
212015-05-09 12:56:39
3102015-05-09 12:56:39
252015-05-09 13:48:30
3162015-05-09 13:48:30
272015-05-09 15:01:09
3202015-05-09 15:01:09

因为你提到VAL值随时间持续递增,且使用的是SQL Server 2012,我们可以直接用**窗口函数LAG()**来实现需求。这个函数能在同一ID分组内,按时间顺序获取上一条记录的VAL值,用当前VAL减去它就能得到增量。

实现SQL语句

SELECT 
    ID,
    VAL,
    Time,
    -- 计算增量:当前VAL减去上一个时间点的VAL,第一条记录无前置值时设为0
    VAL - LAG(VAL, 1, 0) OVER (PARTITION BY ID ORDER BY Time) AS VAL_Increment
FROM 
    YourTableName; -- 替换成你的实际表名

语句细节解释

  • PARTITION BY ID:按ID分组,确保我们只在同一个ID的记录范围内查找上一条数据
  • ORDER BY Time:按时间排序,保证获取的是上一个时间点的VAL值,而非随机的历史记录
  • LAG(VAL, 1, 0):第一个参数是要获取的字段,第二个参数是偏移量(1表示上一条),第三个参数是默认值(无前置记录时返回0,你也可以改成NULL)

执行结果示例

运行上述语句后,会得到如下结果:

IDVALTimeVAL_Increment
212015-05-09 12:54:390
212015-05-09 12:56:390
252015-05-09 13:48:304
272015-05-09 15:01:092
3102015-05-09 12:54:390
3102015-05-09 12:56:390
3162015-05-09 13:48:306
3202015-05-09 15:01:094

如果第一条记录的增量不需要显示0,而是保留NULL,只需把LAG(VAL, 1, 0)改成LAG(VAL, 1)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:50:04