oracle下lag和lead分析函数

    xiaoxiao2021-12-14  17

    转: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';

    转载请注明原文地址: https://ju.6miu.com/read-965509.html

    最新回复(0)