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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值