Oracle返回指定列首行或末行值之FIRST_VALUE与LAST_VALUE

48 篇文章 0 订阅
25 篇文章 0 订阅

FIRST_VALUE与LAST_VALUE功能:返回指定列首行值和末行值

在语法上有9i和10g和区别:

9i:

FIRST_VALUE ( expr ) OVER ( analytic_clause )
10g:
FIRST_VALUE (expr [ IGNORE NULLS ]) OVER (analytic_clause)
如果排序组中的第一个数据为空,oracle会返回空,除非指定IGNORE NULLS。

我的应用:

要完成的功能:汇总统计后,返回最后一个日期。

SQL:关键在于FIRST_VALUE() OVER()的应用。

select count(sec_code) sum_cn, sec_code, sec_sname, nvl(sum(b_sum),0) b_sum, 
nvl(sum(s_sum),0) s_sum, nvl(sum(bs_sum),0) bs_sum, nvl(sum(net_buy),0) net_buy, tradedate from (
select distinct t.sec_code, t.sec_sname, FIRST_VALUE(tradedate) OVER (PARTITION BY sec_code ORDER BY tradedate desc) tradedate, 
nvl(sum(t.buy_value) over(partition by sec_code,tradedate),0) b_sum, nvl(sum(t.sale_value) over(partition by sec_code,tradedate),0) s_sum,  
(nvl(sum(t.buy_value) over(partition by sec_code,tradedate),0)+nvl(sum(t.sale_value) over(partition by sec_code,tradedate),0)) bs_sum, 
(nvl(sum(t.buy_value) over(partition by sec_code,tradedate),0)-nvl(sum(t.sale_value) over(partition by sec_code,tradedate),0)) net_buy from mv_stk_trans_info t 
where to_char(t.tradedate,'yyyy-mm-dd')<=to_char(sysdate,'yyyy-mm-dd') and to_char(t.tradedate,'yyyy-mm-dd')>=to_char(sysdate-30,'yyyy-mm-dd') 
and sec_code='600638' ) co group by sec_code,sec_sname,tradedate order by sum_cn desc


实现:先进行B_SUM,S_SUM_BS_SUM_NET_BUY按SEC_CODE汇总,再记入2012-11-20里

1.sql语句中,注释如下代码结果

 FIRST_VALUE(tradedate) OVER (PARTITION BY sec_code ORDER BY tradedate desc) tradedate

2. 取消对1中的注释结果:


3.






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值