ITPub博客

首页 > 应用开发 > IT综合 > [转]分析函数 last_value的使用

[转]分析函数 last_value的使用

原创 IT综合 作者:action929 时间:2007-07-31 15:09:02 0 删除 编辑

分析函数 last_value的使用

今日,一同事使用了last_value来获取本组的最后一行的值,但是结果与预期的不同,如下:

create table t_last_value (id number , sal number) ;
insert into t_last_value values (1,1) ;
insert into t_last_value values (1,2) ;
insert into t_last_value values (1,3) ;
insert into t_last_value values (2,3) ;
insert into t_last_value values (2,4) ;
insert into t_last_value values (2,5) ;
commit ;

SQL> select id ,
2 last_value(sal) over(partition by id order by sal) last_value
3 from t_last_value;

ID LAST_VALUE
---------- ----------
1 1
1 2
1 3 2 3
2 4
2 5

6 rows selected.

再执行下面的语句,
SQL> select id ,
2 first_value(sal) over(partition by id order by sal) first_value
3 from t_last_value
4 /

ID FIRST_VALUE
---------- -----------
1 1
1 1
1 1
2 3
2 3
2 3

6 rows selected.

结果正确。但为什么last_value的执行不是预期的结果那?
查了下资料,结果是这样:
在使用分析函数的时候,缺省的WINDOWING范围是RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,
呵呵,就是这个原因了,当使用last_value分析函数的时候,在进行比较的时候从当前行向前进行比较,
所以前面的语句执行的结果是正确,但不是预期的

SQL> select id ,
2 first_value(sal) over(partition by id order by sal
3 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) last_value
4 from t_last_value
5 /

ID LAST_VALUE
---------- ----------
1 1
1 1
1 1
2 3
2 3
2 3

6 rows selected.

呵呵,得到预期的结果了

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133835/viewspace-929648/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 一些小SQL
下一篇: 排序的迷惑
请登录后发表评论 登录
全部评论
  • 博文量
    40
  • 访问量
    313759