【查找各日期段内的银行贷款利率问题】

数据表TB(发布日期、存款利率、贷款利率)存有银行分布的历次一年期贷款利率。例如:
(非真实数据):

为方便获得每天的一年期银行贷款利率,我们设计了如下数据表TD(起始日期,截止日期,存款利率、贷款利率),存放各日期段内的银行贷款利率。数据表TD的数据记录示意如下:

现在需要写SQL,根据TB表生成TD表。

 

--建表--
CREATE TABLE TB (
       发布日期 date,
       存款利率 VARCHAR2(10),
       贷款利率 VARCHAR2(10)
);
INSERT INTO TB VALUES(DATE'2010-01-01','8%','10%');
INSERT INTO TB VALUES(DATE'2011-01-01','5%','7%');
INSERT INTO TB VALUES(DATE'2012-01-01','5%','7%');
INSERT INTO TB VALUES(DATE'2012-10-31','5%','6%');
INSERT INTO TB VALUES(DATE'2013-01-01','5%','6%');
INSERT INTO TB VALUES(DATE'2013-03-31','8%','9%');
INSERT INTO TB VALUES(DATE'2013-09-01','8%','10%');
INSERT INTO TB VALUES(DATE'2014-01-01','8%','9%');
INSERT INTO TB VALUES(DATE'2015-01-01','6%','9%');
COMMIT;

--利用位移函数--
SELECT 
       REPLACE(TO_CHAR(发布日期,'YYYY-MM-DD'),'2010-01-01','0001-01-01') AS 起始日期,
       TO_CHAR(NVL(LEAD(发布日期-1,1) OVER(ORDER BY 发布日期),DATE'9999-12-31'),'YYYY-MM-DD') AS 截止日期,
       存款利率,
       贷款利率
FROM ( 
       SELECT 
             发布日期,
             存款利率,
             贷款利率,
             存款利率 || 贷款利率 A,
             LAG(存款利率 || 贷款利率,1) OVER (ORDER BY 发布日期) B
      FROM TB ) T
WHERE T.A <> T.B OR T.B IS NULL;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值