跳到主要内容

lag:向前取值

速查结论

lag(input[, offset[, default]]) 是 Spark SQL 中用于返回当前行之前第 offset 行的值的窗口函数。

语法​

lag(input[, offset[, default]]) OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])

参数说明​

参数类型说明
input表达式要获取前一行值的列或表达式。
offsetINTEGER可选。向前回退的行数,默认值为 1。
default表达式可选。当偏移行不存在时返回的默认值,默认值为 NULL。

示例​

> SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
A1 1 NULL
A1 1 1
A1 2 1
A2 3 NULL

常见报错与避坑指南​

  • 分区首行的处理:对于每个分区内的第一行(或前 offset 行),由于不存在对应的前一行,lag() 返回 default 值(默认为 NULL)。处理结果时需注意 NULL 值的业务含义。
  • ORDER BY 是必需的:lag() 依赖行顺序来确定"前一行",因此 OVER 子句中必须包含 ORDER BY,否则结果无意义。

Since: 2.0.0

微信公众号二维码关注公众号
交流微信二维码加群交流
赞赏二维码赞赏

你可能还想看