首页/数据/SQL 速查/环比计算(与上期对比)
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

环比计算(与上期对比)

用 LAG 取上一期值算环比:注意分区(门店/品类)与排序(月份)要写全,否则跨对象对比会出错。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT store_id, month, revenue,
       LAG(revenue) OVER (PARTITION BY store_id ORDER BY month) AS prev_revenue,
       ROUND(100.0 * (revenue - LAG(revenue) OVER (PARTITION BY store_id ORDER BY month))
             / NULLIF(LAG(revenue) OVER (PARTITION BY store_id ORDER BY month), 0), 2) AS mom_pct
FROM store_monthly;
分区PARTITION BY 业务对象(门店/商品)
排序ORDER BY 时间
NULL首月无环比;分母为 0 用 NULLIF

易错点

  • 分区键漏写会让不同门店的数据互相做环比,结果完全错误
  • 月份有缺失时 LAG 会跳过空月对错期,先补全月份序列

数据来源与参考

  • MySQL 8.0 Reference Manual · LAG
  • PostgreSQL Documentation · Window Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌