[转]分析函数 last_value的使用

分析函数 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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133835/viewspace-929648/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值