简化一下问题,如下列表,
类型 天数 总天数 序列
A 10 10 1
A 10 10 2
B 10 10 3
A 10 20 4
B 10 10 5
B 10 20 6
B 10 30 7
A 10 40 8
B 10 10 9
A 10 20 10
总天数是计算出来的,即判断如果类型上一类型为A,那么总天数等于天数
上一类型为B,则总天数=天数+上一天数,并且继续判断上上一列的类型,如
过还是B,则总天数=天数+上一天数+上上一天数各位大神,帮忙写一个分析函数的sql。实际业务:由于付息中间存在还本情况,还本时会偿还该付息区间内已偿付本金的所有利息,例如一笔基金本金1亿,
按月付息,每月支付100万,在某月中偿付本金5000万,那么该天需要插入一笔付息记录,及5000万对应的半个月利息25万。
月底在支付剩余5000万对应的利息50万实际数据:如下表根据起息日排序,判断类型的上一条数据是否为还本日,如果为还本日,则实际天数=天数+上一行数据的天数,否则等于天数本身
起息日 到期日 类型 天数 实际天数 还本金额 实际金额
2014/3/13 2017/4/10 付息日 1124 1124 0 200000000
2017/4/10 2017/4/29 还本日 19 19 100000000 200000000
2017/4/29 2017/5/26 还本日 27 46 50000000 100000000
2017/5/26 2018/4/10 付息日 319 365 0 50000000
2018/4/10 2019/3/13 到期日 337 337 50000000 50000000
例如:第一条上一行类型字段数据为空,则实际天数=天数=1124
第二条上一行类型字段数据为付息日,则实际天数=天数=19
第三条上一行类型字段数据为还本日,则实际天数=天数+上一行实际天数=27+19=46
第四条上一行类型字段数据为还本日,则实际天数=天数+上一行实际天数=319+46=319+27+19=365
建表语句
create table TEST99
(
LX1 VARCHAR2(10),
VDATE DATE,
MDATE DATE,
TS NUMBER,
HBJE NUMBER,
AMT NUMBER
)
数据
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('付息日', to_date('13-03-2014', 'dd-mm-yyyy'), to_date('10-04-2017', 'dd-mm-yyyy'), 1124, 0, 200000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('还本日', to_date('10-04-2017', 'dd-mm-yyyy'), to_date('29-04-2017', 'dd-mm-yyyy'), 19, 100000000, 200000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('还本日', to_date('29-04-2017', 'dd-mm-yyyy'), to_date('26-05-2017', 'dd-mm-yyyy'), 27, 50000000, 100000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('付息日', to_date('26-05-2017', 'dd-mm-yyyy'), to_date('10-04-2018', 'dd-mm-yyyy'), 319, 0, 50000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('到期日', to_date('10-04-2018', 'dd-mm-yyyy'), to_date('13-03-2019', 'dd-mm-yyyy'), 337, 50000000, 50000000);
类型 天数 总天数 序列
A 10 10 1
A 10 10 2
B 10 10 3
A 10 20 4
B 10 10 5
B 10 20 6
B 10 30 7
A 10 40 8
B 10 10 9
A 10 20 10
总天数是计算出来的,即判断如果类型上一类型为A,那么总天数等于天数
上一类型为B,则总天数=天数+上一天数,并且继续判断上上一列的类型,如
过还是B,则总天数=天数+上一天数+上上一天数各位大神,帮忙写一个分析函数的sql。实际业务:由于付息中间存在还本情况,还本时会偿还该付息区间内已偿付本金的所有利息,例如一笔基金本金1亿,
按月付息,每月支付100万,在某月中偿付本金5000万,那么该天需要插入一笔付息记录,及5000万对应的半个月利息25万。
月底在支付剩余5000万对应的利息50万实际数据:如下表根据起息日排序,判断类型的上一条数据是否为还本日,如果为还本日,则实际天数=天数+上一行数据的天数,否则等于天数本身
起息日 到期日 类型 天数 实际天数 还本金额 实际金额
2014/3/13 2017/4/10 付息日 1124 1124 0 200000000
2017/4/10 2017/4/29 还本日 19 19 100000000 200000000
2017/4/29 2017/5/26 还本日 27 46 50000000 100000000
2017/5/26 2018/4/10 付息日 319 365 0 50000000
2018/4/10 2019/3/13 到期日 337 337 50000000 50000000
例如:第一条上一行类型字段数据为空,则实际天数=天数=1124
第二条上一行类型字段数据为付息日,则实际天数=天数=19
第三条上一行类型字段数据为还本日,则实际天数=天数+上一行实际天数=27+19=46
第四条上一行类型字段数据为还本日,则实际天数=天数+上一行实际天数=319+46=319+27+19=365
建表语句
create table TEST99
(
LX1 VARCHAR2(10),
VDATE DATE,
MDATE DATE,
TS NUMBER,
HBJE NUMBER,
AMT NUMBER
)
数据
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('付息日', to_date('13-03-2014', 'dd-mm-yyyy'), to_date('10-04-2017', 'dd-mm-yyyy'), 1124, 0, 200000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('还本日', to_date('10-04-2017', 'dd-mm-yyyy'), to_date('29-04-2017', 'dd-mm-yyyy'), 19, 100000000, 200000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('还本日', to_date('29-04-2017', 'dd-mm-yyyy'), to_date('26-05-2017', 'dd-mm-yyyy'), 27, 50000000, 100000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('付息日', to_date('26-05-2017', 'dd-mm-yyyy'), to_date('10-04-2018', 'dd-mm-yyyy'), 319, 0, 50000000);
insert into test99 (LX1, VDATE, MDATE, TS, HBJE, AMT)
values ('到期日', to_date('10-04-2018', 'dd-mm-yyyy'), to_date('13-03-2019', 'dd-mm-yyyy'), 337, 50000000, 50000000);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货