oracle去年同期日期,问个算去年同期值的sql,该怎么处理

问个算去年同期值的sql

本帖最后由 charlesxu 于 2013-05-21 11:27:01 编辑

表中数据如下:

日期  得分

2012-1 85

2012-2 98

2012-3 56

2012-4 66

2012-5 34

。。。

。。。

2013-1 82

2013-2 78

2013-3 29

2013-4 77

sql查4个值,日期、得分、去年同期得分、历史最高得分,希望取到的值如下:

日期  得分  去年同期得分 历史最高得分

2012-1 85

2012-2 98

2012-3 56

2012-4 66

2012-5 34

。。。

。。。

2013-1 82     85         85

2013-2 78     98         98

2013-3 29     56         29

2013-4 66     77         77

请问这个sql怎么写?

分享到:

------解决方案--------------------

这效果么

如果日期格式都是固定的 可以

如果是2011-1那可能要找到'-'的位置开始截取了 稍微麻烦了点

with t1 as

(

select '2011-01' dt,85 sc from dual union all

select '2011-02' dt,98 sc from dual union all

select '2011-03' dt,56 sc from dual union all

select '2011-04' dt,66 sc from dual union all

select '2012-01' dt,33 sc from dual union all

select '2012-02' dt,34 sc from dual union all

select '2012-03' dt,54 sc from dual union all

select '2012-04' dt,69 sc from dual union all

select '2013-01' dt,97 sc from dual union all

select '2013-02' dt,43 sc from dual union all

select '2013-03' dt,44 sc from dual union all

select '2013-04' dt,34 sc from dual

)

select dt,sc,s_sc,

(select max(sc) from t1 where t1.dt <= t.dt and substr(t1.dt,-2)=substr(t.dt,-2)) m_sc

from

(

select dt,sc,

case row_number() over(partition by substr(dt,-2) order by rownum)

when 1 then null

else lag(sc) over(order by substr(dt,-2),substr(dt,1,4)) end s_sc

from t1

) t

order by dt

dt      sc    s_sc    m_sc

------------------------------------------

12011-018585

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值