简化一下问题,如下列表,
类型 天数 总天数 序列
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);