转:http://blog.csdn.net/thinkscape/article/details/8290894
版权声明:本文为博主原创文章,未经博主允许不得转载。
Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。
这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。
语法:
[sql] view plain copy print ? /*语法*/ lag(exp_str,offset,defval) over() Lead(exp_str,offset,defval) over() --exp_str要取的列 --offset取偏移后的第几行数据 --defval:没有符合条件的默认值 /*语法*/ lag(exp_str,offset,defval) over() Lead(exp_str,offset,defval) over() --exp_str要取的列 --offset取偏移后的第几行数据 --defval:没有符合条件的默认值 1. [sql] view plain copy print ? /*基础数据*/ select t.* from test1 t; /*基础数据*/ select t.* from test1 t;2.
[sql] view plain copy print ? /*用lag,lead分析以后的数据*/ select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name, lead(t.name,1,0) over(order by id desc) min_v from TEST1 t; /*用lag,lead分析以后的数据*/ select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name, lead(t.name,1,0) over(order by id desc) min_v from TEST1 t;3.
[sql] view plain copy print ? /*满足查询结果的数据*/ select i.* from(select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name, lead(t.name,1,0) over(order by id desc) min_v from TEST1 t) i where i.name='3aa'; /*满足查询结果的数据*/ select i.* from(select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name, lead(t.name,1,0) over(order by id desc) min_v from TEST1 t) i where i.name='3aa';