• Oracle分析函数之LEAD和LAG


    LAG 访问结果集中当前行之前的行 LAG (value_expr [,offset] [,default])OVER ( [ partition_by_clause ] order_by_clause )
    LEAD 访问结果集中当前后之后的行 lead(value_expr [,offset][,default]) over([partition_by_clause] order by Order_by_clause)
    参数值说明:
    value_expr 值表达式,通常是字段,也可是是表达式。value_expr本身不支持分析函数,也就是lead不支持多层调用。
    offset 偏移量,如果offset是正数表示顺序下的第几个,如果是负数就是反顺序的第几个。 如果不提供这个参数,就是默认1.
    default 默认值,如果没有找到offset所指定的值,就返回default值。如果没有设置,且找不到,那么就返回Null
    下面是个简单的例子:
    SQL> select deptno,
    2 sal,
    3 ename,
    4 lead(ename, 1, 'lead_ename') over(partition by deptno order by sal) lead_ename,
    5 lag(ename, 1, 'lag_ename') over(partition by deptno order by sal) lag_ename
    6 from emp;
        DEPTNO        SAL ENAME      LEAD_ENAME LAG_ENAME
    ---------- ---------- ---------- ---------- ----------
    10 1300 MILLER CLARK lag_ename
    10 2450 CLARK KING MILLER
    10 5000 KING lead_ename CLARK
    20 800 SMITH JONES lag_ename
    20 2975 JONES FORD SMITH
    20 3000 FORD lead_ename JONES
    30 950 JAMES WARD lag_ename
    30 1250 WARD MARTIN JAMES
    30 1250 MARTIN TURNER WARD
    30 1500 TURNER ALLEN MARTIN
    30 1600 ALLEN BLAKE TURNER
    30 2850 BLAKE lead_ename ALLEN

    已选择12行。
    上面例子说明:lead和lag按deptno分组,并在每个分组里按sal列排序。
    lead(ename, 1, 'lead_ename'),表示取当前行下一个ename值,如果找不到就用'lead_ename'字符串替代;
    lag(ename,1,'lag_ename'),表示取当前行前一个ename值,如果找不到就用'lag_ename'字符串取代。
  • 相关阅读:
    详解快速排序算法
    json和字符串、数组
    晚上回去搞这个
    json2使用方法
    mysql格式化时间函数:FROM_UNIXTIME
    java链接sqlite
    第七章 闭包
    产品家:你的闷骚,我的产品!
    关于json的格式
    JQuery选择器$()的工作原理浅析
  • 原文地址:https://www.cnblogs.com/zhaoshuangshuang/p/3275807.html
Copyright © 2020-2023  润新知