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

低版本MySQL不使用LAG函数如何计算月度相邻行数据的差值?

实现思路

  • 先给每个月份映射对应的数字序号,方便匹配上一个月的记录
  • 对销量表做自关联,关联条件设为当前月的序号 = 上月序号 + 1
  • 用当前月销量减去上月销量得到差值,过滤掉没有上月数据的1月即可

具体SQL语句

如果你的Month字段存储的是「一月、二月」这类中文文本,可直接用以下语句:

SELECT 
    t1.Month,
    (t1.Qty - t2.Qty) AS 差值
FROM 
    sales t1
LEFT JOIN 
    sales t2 
    ON (
        CASE t1.Month 
            WHEN '一月' THEN 1
            WHEN '二月' THEN 2
            WHEN '三月' THEN 3
            WHEN '四月' THEN 4
            WHEN '五月' THEN 5
        END
    ) = (
        CASE t2.Month 
            WHEN '一月' THEN 1
            WHEN '二月' THEN 2
            WHEN '三月' THEN 3
            WHEN '四月' THEN 4
            WHEN '五月' THEN 5
        END
    ) + 1
WHERE 
    t2.Qty IS NOT NULL
ORDER BY 
    CASE t1.Month 
        WHEN '一月' THEN 1
        WHEN '二月' THEN 2
        WHEN '三月' THEN 3
        WHEN '四月' THEN 4
        WHEN '五月' THEN 5
    END;

如果你的Month字段本身存储的是1、2、3、4、5这类数字序号,SQL可以简化为:

SELECT 
    t1.Month,
    (t1.Qty - t2.Qty) AS 差值
FROM 
    sales t1
LEFT JOIN 
    sales t2 ON t1.Month = t2.Month + 1
WHERE 
    t2.Qty IS NOT NULL
ORDER BY t1.Month;

输出结果

针对你提供的测试数据,执行后输出结果和预期完全一致:

Month差值
二月-1
三月6
四月-6
五月4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 12:21:02