flink sql lead lag
时间: 2025-02-05 22:14:09 浏览: 117
### Flink SQL 中 `LEAD` 和 `LAG` 函数的使用
在Flink SQL中,`LEAD`和`LAG`函数用于访问相对于当前行之前或之后的一行或多行的数据。这些函数特别适用于分析数据趋势、计算变化率等场景。
#### LAG 函数
`LAG`函数获取前一行的数据,默认情况下返回NULL如果不存在前置行。语法如下:
```sql
LAG(value_expression [, offset] [, default_value]) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
```
- `value_expression`: 要检索列名或其他表达式。
- `offset`: 前移多少行(默认为1),即向前查找第几行的数据。
- `default_value`: 如果指定偏移量超出了范围,则返回此值(可选),通常设置为NULL[^1]。
#### LEAD 函数
相反地,`LEAD`函数用来取得后续某一行的数据。其定义方式几乎相同于`LAG`:
```sql
LEAD(value_expression [, offset] [, default_value]) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
```
同样的三个参数分别代表要读取的目标字段、跳跃的行数以及当超出边界时使用的缺省值。
#### 实际应用案例
假设有一个名为`sensors`的表记录着传感器每分钟采集到的信息,包括时间戳(`ts`)和温度读数(`temperature`)。为了比较相邻时刻之间的温差,可以构建如下的SQL语句:
```sql
SELECT ts,
temperature AS current_temperature,
LAG(temperature, 1) OVER w AS previous_temperature,
temperature - COALESCE(LAG(temperature, 1) OVER w, 0) as temp_diff_from_last_minute
FROM sensors
WINDOW w AS (ORDER BY ts);
```
这段代码会输出每一刻度的时间戳及其对应的即时温度,并附带一分钟之前的温度测量结果以及两者间的差异。对于第一条记录而言,由于没有更早的历史数据可用,因此它会被赋予零作为初始条件来进行减法运算。
阅读全文
相关推荐














