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

LAG 取上一行值

取当前行之前第 N 行的值:环比、差值、会话切分等时序计算的基础;首行没有前值时返回默认值(可指定)。

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

示例

示例
SELECT dt, amount,
       LAG(amount, 1) OVER (ORDER BY dt)          AS prev_amount,
       amount - LAG(amount, 1) OVER (ORDER BY dt) AS diff
FROM daily_sales
ORDER BY dt;
语法LAG(expr [, offset [, default]])
默认值未指定时首行为 NULL
分区常配合 PARTITION BY 做组内环比

易错点

  • 首行差值为 NULL,报表里要处理(过滤或补默认值),避免显示异常
  • 排序键有缺失日期时 LAG 取到的是“上一条记录”而不是“上一天”,需要补日期序列

数据来源与参考

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