• Oracle分析函数之FIRST_VALUE和LAST_VALUE


    FIRST_VALUE 返回组中数据窗口的第一个值 FIRST_VALUE ( [scalar_expression )OVER ( [ partition_by_clause ] order_by_clause ) 
    LAST_VALUE 返回组中数据窗口的最后一个值 LAST_VALUE ( [scalar_expression )OVER ( [ partition_by_clause ] order_by_clause )
    一个简单例子:
    SQL> select deptno,
    2 sal,
    3 ename,
    4 first_value(ename) over(partition by deptno order by sal) first_ename,
    5 last_value(ename) over(partition by deptno order by sal) last_ename1,
    6 last_value(ename) over(partition by deptno) last_ename2
    7 from emp;
        DEPTNO        SAL ENAME      FIRST_ENAM LAST_ENAME LAST_ENAME
    ---------- ---------- ---------- ---------- ---------- ----------
    10 1300 MILLER MILLER MILLER KING
    10 2450 CLARK MILLER CLARK KING
    10 5000 KING MILLER KING KING
    20 800 SMITH SMITH SMITH FORD
    20 2975 JONES SMITH JONES FORD
    20 3000 FORD SMITH FORD FORD
    30 950 JAMES JAMES JAMES BLAKE
    30 1250 MARTIN JAMES WARD BLAKE
    30 1250 WARD JAMES WARD BLAKE
    30 1500 TURNER JAMES TURNER BLAKE
    30 1600 ALLEN JAMES ALLEN BLAKE
    30 2850 BLAKE JAMES BLAKE BLAKE
    已选择12行。
    上面例子说明:
    请注意last_ename1和last_ename2两列的区别,在语法上last_ename2比last_ename1在over中缺少了order by sal的排序操作。
    last_value(ename) over(partition by deptno)为以deptno分组的最后一个值,这个很容易理解。
    last_value(ename) over(partition by deptno order by sal),会按照deptno分组的基础上按sal列升序排序,取最后一个值,其实只要deptno和sal不是完全一样,
    取值都跟当前行ename值相同;如果depetno和sal有相同的行,则按最后一行算(如上面deptno=30并且sal=1250的两行),这点需要特别注意。
  • 相关阅读:
    stress工具使用指南和结果分析
    copy.c实现
    sysbench测试阿里云CPU
    sysbench测试阿里云ECS云磁盘的IOPS,吞吐量
    iostat详解
    sysbench_fileio.sh
    rm -f /var/lib/rpm/__db*;rpm --rebuilddb
    HeadFirst 13 (包装器, 过滤器) not Finish
    基于Linux的oracle数据库管理 part5( linux启动关闭 自动启动关闭 oracle )
    基于Linux的oracle数据库管理 part4( shell管理 上 )
  • 原文地址:https://www.cnblogs.com/zhaoshuangshuang/p/3275819.html
Copyright © 2020-2023  润新知