博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 12c 之分析函数— LAST_VALUE
阅读量:4040 次
发布时间:2019-05-24

本文共 5473 字,大约阅读时间需要 18 分钟。

Oracle 12c 之分析函数— LAST_VALUE

LAST_VALUE也是一个分析函数,它返回一个有序的值集合中的最后一个值。 

可以对比FIRST_VALUE函数。

我们来看看例子:

SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED  4                 FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     13-1月 -01        101 Kochhar                                                 17000 21-9月 -05     13-1月 -01        102 De Haan                                                 17000 13-1月 -01     13-1月 -01已用时间:  00: 00: 00.05

看看下面的查询与上面的查询有什么不同?

SQL>SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED  4                 FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date DESC);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     21-9月 -05        102 De Haan                                                 17000 13-1月 -01     21-9月 -05        101 Kochhar                                                 17000 21-9月 -05     21-9月 -05已用时间:  00: 00: 00.01SQL>

虽然 101号员工和102号员工具有相同的工资(Salary均为17000),但是在查询中,子查询中使用hire_date列进行了排序处理,第二个SQL查询语句中,按照 hire_date的降序(DESC)进行了排序,所以在查询结果中,102号员工排在了101号员工之前。

再看下面的两条SQL查询,找出不同点:

SQL>SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC, employee_id ROWS BETWEEN UNBOUNDED PRECEDING  4                 AND UNBOUNDED FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     13-1月 -01        101 Kochhar                                                 17000 21-9月 -05     13-1月 -01        102 De Haan                                                 17000 13-1月 -01     13-1月 -01已用时间:  00: 00: 00.01SQL>SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC, employee_id ROWS BETWEEN UNBOUNDED PRECEDING  4                 AND UNBOUNDED FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date DESC);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     13-1月 -01        101 Kochhar                                                 17000 21-9月 -05     13-1月 -01        102 De Haan                                                 17000 13-1月 -01     13-1月 -01已用时间:  00: 00: 00.01SQL>

By ordering within the function by both salary and the unique key employee_id, you can ensure the same result regardless of the ordering in the subquery.

再看RANGE子句的使用:

SQL>SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND  4                 UNBOUNDED FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     21-9月 -05        102 De Haan                                                 17000 13-1月 -01     21-9月 -05        101 Kochhar                                                 17000 21-9月 -05     21-9月 -05已用时间:  00: 00: 00.01SQL>SQL> SELECT employee_id, last_name, salary, hire_date,  2         LAST_VALUE(hire_date)  3           OVER (ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND  4                 UNBOUNDED FOLLOWING) AS lv  5    FROM (SELECT * FROM employees  6            WHERE department_id = 90  7            ORDER BY hire_date DESC);EMPLOYEE_ID LAST_NAME                                              SALARY HIRE_DATE      LV----------- -------------------------------------------------- ---------- -------------- --------------        100 King                                                    24000 17-6月 -03     21-9月 -05        102 De Haan                                                 17000 13-1月 -01     21-9月 -05        101 Kochhar                                                 17000 21-9月 -05     21-9月 -05已用时间:  00: 00: 00.00SQL>SQL>

 

转载地址:http://zftdi.baihongyu.com/

你可能感兴趣的文章
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Word Break(python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Clone Graph(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>