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

MySQL计算相邻行approved字段差值并生成别名approved_diff

MySQL 实现相邻行差值计算方案

MySQL 8.0 及以上版本(推荐)

MySQL 8.0 原生支持窗口函数,用LAG()函数可以直接实现需求,逻辑简洁且性能更好:

SELECT
    date,
    approved,
    approved - LAG(approved, 1, 0) OVER (ORDER BY date ASC) AS approved_diff
FROM transaction
ORDER BY date ASC;

逻辑说明

  • LAG(approved, 1, 0)作用是取按date升序排序后,当前行往前1行的approved字段值,如果是排序后的第一行(不存在上一行),默认返回0
  • 第一行计算结果为approved - 0,等于当前行approved值,符合首行计算规则;后续行自动计算当前行与上一行的差值
  • 外层ORDER BY date ASC保证最终返回结果排序和计算逻辑一致

MySQL 5.x 版本(无窗口函数兼容方案)

如果使用不支持窗口函数的旧版本MySQL,可以通过用户变量记录上一行值实现相同效果:

SELECT
    date,
    approved,
    approved - @prev AS approved_diff,
    @prev := approved
FROM (
    -- 子查询先固定排序,避免计算顺序错乱
    SELECT date, approved FROM transaction ORDER BY date ASC
) AS sorted_data,
-- 初始化记录上一行值的用户变量,初始值设为0适配首行计算规则
(SELECT @prev := 0) AS init_var
ORDER BY date ASC;

结果验证

按照给出的原始数据(按date升序approved依次为10、15、50、51、56),最终返回的approved_diff列值依次为10、5、35、1、5,完全匹配需求规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:45:33