zoukankan      html  css  js  c++  java
  • 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的两行),这点需要特别注意。
  • 相关阅读:
    【阿里云产品公测】云引擎ACE新手实战基于Wordpress
    【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验
    洗牌算法详解
    常用的位操作
    字符串乘法
    如何运用二分查找算法
    递归详解
    判断回文链表
    子集、排列、组合问题汇总
    接雨水问题详解
  • 原文地址:https://www.cnblogs.com/zhaoshuangshuang/p/3275819.html
Copyright © 2011-2022 走看看