LAST_VALUE [analytic]

用于选择表或分区的最后一个值(由 window-order-clause 确定),无需使用自联接。 LAST_VALUE 在窗口顺序子句统计后,取分区的最后一个记录。然后此函数根据最后一个记录计算表达式,并返回结果。如果要使用最后值做为计算的基准,该函数非常有帮助。

LAST_VALUE()window-order-clause 结合使用,以生成具有确定性的结果。如果没有为当前行指定 窗口,则默认窗口为 UNBOUNDED PRECEDING AND CURRENT ROW

行为类型

不可变

语法

LAST_VALUE ( expression [ IGNORE NULLS ] ) OVER (
    [ window-partition-clause ]
    [ window-order-clause ]
    [ window-frame-clause ] )

参数

表达式
要求值的表达式,例如常数、列、非统计函数、函数表达式或任何涉及以上内容的表达式。
IGNORE NULLS
指定返回集中的最后一个非 NULL 值,或者如果所有值均为 NULL,则返回 NULL。如果忽略此选项且集合中的最后一个值为 NULL,则函数将返回 NULL
OVER()
请参阅分析函数

示例

如果在分析数据时使用在 窗口框架 中定义的架构,以下查询并不会按照部门显示最高工资数;它会按照部门和工资显示最高工资数。

=> SELECT deptno, sal, empno, LAST_VALUE(sal)
       OVER (PARTITION BY deptno ORDER BY sal) AS lv
   FROM emp;
 deptno | sal | empno |    lv
--------+-----+-------+--------
     10 | 101 |     1 |     101
     10 | 104 |     4 |     104
     20 | 100 |    11 |     100
     20 | 109 |     7 |     109
     20 | 109 |     6 |     109
     20 | 109 |     8 |     109
     20 | 110 |    10 |     110
     20 | 110 |     9 |     110
     30 | 102 |     2 |     102
     30 | 103 |     3 |     103
     30 | 105 |     5 |     105

如果包含了窗口框架子句 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGLAST_VALUE() 按部门返回最高工资,是信息的准确表达。

=> SELECT deptno, sal, empno, LAST_VALUE(sal)
       OVER (PARTITION BY deptno ORDER BY sal
            ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
   FROM emp;
 deptno | sal | empno |    lv
--------+-----+-------+--------
     10 | 101 |     1 |     104
     10 | 104 |     4 |     104
     20 | 100 |    11 |     110
     20 | 109 |     7 |     110
     20 | 109 |     6 |     110
     20 | 109 |     8 |     110
     20 | 110 |    10 |     110
     20 | 110 |     9 |     110
     30 | 102 |     2 |     105
     30 | 103 |     3 |     105
     30 | 105 |     5 |     105

更多示例,请访问 FIRST_VALUE()

另请参阅