窗口函数LAG和LEAD怎么用
时间: 2024-05-14 09:17:40 浏览: 149
LAG 和 LEAD 是窗口函数中常用的函数,用于在查询结果中得到当前行前面或后面的行的数据。
LAG 函数的语法如下:
LAG (expression, offset, default_value) OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
其中:
- expression 指向需要前一个行获取数据的列或表达式
- offset 表示当前行之前的行数(可选,默认为 1)
- default_value 表示当前行之前没有记录时返回的默认值(可选)
例如,假设我们有以下表格:
```
+----+---------+-----+
| ID | Name | Age |
+----+---------+-----+
| 1 | Alice | 18 |
| 2 | Bob | 20 |
| 3 | Charlie | 25 |
| 4 | David | 30 |
+----+---------+-----+
```
使用以下 SQL 语句,可以在 Name 列前获取 Age 列的值:
```
SELECT Name, Age, LAG (Age, 1, 0) OVER (ORDER BY ID) AS Previous_Age
FROM my_table;
```
查询结果如下:
```
+---------+-----+--------------+
| Name | Age | Previous_Age |
+---------+-----+--------------+
| Alice | 18 | 0 |
| Bob | 20 | 18 |
| Charlie | 25 | 20 |
| David | 30 | 25 |
+---------+-----+--------------+
```
LEAD 函数与 LAG 函数的使用方法相同,只不过它可以用来获取当前行后面的行的值。具体语法如下:
```
LEAD (expression, offset, default_value) OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
```
如果要获取当前行之后的行的 Age 列的值,可以使用以下 SQL 语句:
```
SELECT Name, Age, LEAD (Age, 1, 0) OVER (ORDER BY ID) AS Next_Age
FROM my_table;
```
查询结果如下:
```
+---------+-----+---------+
| Name | Age | Next_Age |
+---------+-----+---------+
| Alice | 18 | 20 |
| Bob | 20 | 25 |
| Charlie | 25 | 30 |
| David | 30 | 0 |
+---------+-----+---------+
```
希望这可以解决你的疑问,如果有其他问题,请随时问我。
阅读全文