LAG

说明

提供在不使用自连接的情况下访问表中多个行的途径,给定要查询的行组和一个位置指针,LAG函数能根据给定的物理偏移量访问前面位置的行。

语法

lag ::=

参数

value_expr

一个表达式。

offset

向前的偏移量,如果不指定,则默认值为1。此参数为正数时相当于指定向前的偏移量;为负数时相当于指定向后的偏移量;为0时相当于取本行的值。

default

如果偏移量超过窗口范围,则返回可选的default值,如果没有指定default的值,则其默认值为NULL。

query_partition_clause

一个分区语句。

order_by_clause

一个排序语句。

返回值

给定的物理偏移量前面位置行的表达式的值。

示例

示例1: 查看排序在前面的记录值

--  清理环境
DROP TABLE tab1 CASCADE;

--  创建表并插入数据
create table tab1(id INT, a INT, b INT);

INSERT INTO tab1 VALUES(1, 21, 55);
INSERT INTO tab1 VALUES(2, 21, 56);
INSERT INTO tab1 VALUES(3, 21, 48);
INSERT INTO tab1 VALUES(4, 22, 70);
INSERT INTO tab1 VALUES(5, 22, 65);
INSERT INTO tab1 VALUES(6, 11, 40);
INSERT INTO tab1 VALUES(7, 11, 43);
INSERT INTO tab1 VALUES(8, 31, 77);
INSERT INTO tab1 VALUES(9, 32, 80);


SELECT * FROM tab1 ORDER BY id;
ID(int)      |A(int)      |B(int)      |
-------------------------------------
1            |21          |55          |
-------------------------------------
2            |21          |56          |
-------------------------------------
3            |21          |48          |
-------------------------------------
4            |22          |70          |
-------------------------------------
5            |22          |65          |
-------------------------------------
6            |11          |40          |
-------------------------------------
7            |11          |43          |
-------------------------------------
8            |31          |77          |
-------------------------------------
9            |32          |80          |
总数目:9


--  查看排序在前面的记录值
SELECT id, a, b, LAG(a, 2) OVER (ORDER BY a,b) FROM tab1 ORDER BY id;
ID(int)      |A(int)      |B(int)      |LAG(int)      |
---------------------------------------------------
1            |21          |55          |11            |
---------------------------------------------------
2            |21          |56          |21            |
---------------------------------------------------
3            |21          |48          |11            |
---------------------------------------------------
4            |22          |70          |21            |
---------------------------------------------------
5            |22          |65          |21            |
---------------------------------------------------
6            |11          |40          |null          |
---------------------------------------------------
7            |11          |43          |null          |
---------------------------------------------------
8            |31          |77          |22            |
---------------------------------------------------
9            |32          |80          |22            |
总数目:9

--  删除表
DROP TABLE tab1;