oracle 分析函数 lag lead

Lag 和 Lead 函数可以在一次查询中取出同一字段的前 N 行的数据和后 N 行的值。这种操作可以使用对相同表的表连接来实现,不过使用 LAG 和 LEAD 有更高的效率。

语法如下:

LAG  (value_expression [,offset] [,default]) OVER ([query_partition_clase] order_by_clause)
LEAD (value_expression [,offset] [,default]) OVER ([query_partition_clase] order_by_clause)


其中:
value_expression:可以是一个字段或一个内建函数。
offset是正整数,默认为1,指往前或往后几点记录.因组内第一个条记录没有之前的行,最后一行没有之后的行,
default就是用于处理这样的信息,默认为空.

以下是
LAG

LEAD
的例子:

SQL> select year,region,profit ,lag (profit,1) over (order by year)



2       as last_year_exp from test;



YEAR REGION      PROFIT LAST_YEAR_EXP

---- ------- ---------- -------------

2003 West            88

2003 West            88            88

2003 Central        101            88

2003 Central        100           101

2003 East           102           100

2004 West            77           102

2004 East           103            77

2004 West            89           103



SQL> select year,region,profit ,lead (profit,1) over (order by year)



2       as next_year_exp from test;



YEAR REGION      PROFIT NEXT_YEAR_EXP

---- ------- ---------- -------------

2003 West            88            88

2003 West            88           101

2003 Central        101           100

2003 Central        100           102

2003 East           102            77

2004 West            77           103

2004 East           103            89

2004 West            89



Lead 和Lag函数也可以使用分组,以下是使用region分组的例子:

SQL> select year,region,profit ,


2 lag (profit,1,0) over (PARTITION BY region order by year)





3       as last_year_exp from test;





YEAR REGION      PROFIT LAST_YEAR_EXP


---- ------- ---------- -------------


2003 Central        101             0


2003 Central        100           101


2003 East           102             0


2004 East           103           102


2003 West            88             0


2003 West            88            88


2004 West            77            88


2004 West            89            77

你可能感兴趣的:(oracle,sql)