数据表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;