首页/数据/SQL 速查/同比计算(跨 12 期)
聚合与窗口函数54 条

同比计算(跨 12 期)

LAG(x, 12) 取去年同月值算同比;前提是数据按月连续、每年 12 期,写死偏移量时先校验数据完整性。

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

示例

示例
SELECT product_id, month, revenue,
       LAG(revenue, 12) OVER (PARTITION BY product_id ORDER BY month) AS last_year,
       ROUND(100.0 * (revenue - LAG(revenue, 12) OVER (PARTITION BY product_id ORDER BY month))
             / NULLIF(LAG(revenue, 12) OVER (PARTITION BY product_id ORDER BY month), 0), 2) AS yoy_pct
FROM product_monthly;
偏移12 期 = 上年同期(按月)
更稳写法按“年月-1 年”自连接或先用日历表对齐
缺失月偏移量会错位,先检查并补齐

易错点

  • 数据缺月时 LAG(…, 12) 拿到的不是去年同期,上线前用完整性校验兜底
  • 跨年拼接月份数字(如 202401→202400)容易出错,用日期类型或年月序号列

数据来源与参考

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