[轉]分析函式 last_value的使用

action929發表於2007-07-31

分析函式 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部落格 ” ,連結:http://blog.itpub.net/133835/viewspace-929648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章