分析函数 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.
呵呵,得到预期的结果了
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133835/viewspace-929648/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/133835/viewspace-929648/