Netezza SQL如何计算不同利率的每日复利

问题描述 投票:0回答:1

我在弄清楚如何计算不同利率期间的初始金额的每日复利时遇到麻烦,无法得出包括每个利率期间的利息金额的新总计。面临的挑战是,对于每个后续利率期,您都必须计算金额的利息加上之前的利息!!!因此,这并不是一个简单的总计。

例如,使用以下费率表。

rate from date rate to date rate
-------------- ------------ ----
2013-07-15     2013-09-30   3
2013-10-01     2013-12-31   4
2014-01-01     2014-03-31   3

使用$ 32,550.37的初始金额,我必须遍历每个利率期并计算利息,最终的金额为$ 33,337.34。

rate from date rate to date rate daysx amount     interest
-------------- ------------ ---- ----- ---------- --------
2013-07-15     2013-09-30   .03  78    32,550.37  209.34
2013-10-01     2013-12-31   .04  92    32,759.71  331.94
2014-01-01     2014-03-31   .03  90    33,091.65  245.69
                          Final Amount 33,337.34

例如,初始金额为$ 32,550.37,利息为$ 209.34,利率为3%。对于第二个利率期,我将该利息添加到金额中,即32,759.71美元,然后计算32,759.71美元的利息为4%。等

我正在使用不允许递归SQL的Netezza,所以我一直在尝试使用窗口函数,但还没有成功...

DROP TABLE TRATES;
CREATE TABLE TRATES (RATE_FROM_DATE DATE, RATE_TO_DATE DATE, RATE DECIMAL(10,2));
INSERT INTO TRATES VALUES ('2013-07-15','2013-09-30',.03);
INSERT INTO TRATES VALUES ('2013-10-01','2013-12-31',.04);
INSERT INTO TRATES VALUES ('2014-01-01','2014-03-31',.03);

SELECT TRATES.*
     , DAYS_BETWEEN(RATE_FROM_DATE, RATE_TO_DATE)+1 AS DAYSX
     , (AMOUNT * POW(1+(RATE)/365,(DAYS_BETWEEN(RATE_FROM_DATE, RATE_TO_DATE)+1)))) – AMOUNT
       AS INTEREST
     , FIRST_VALUE(AMOUNT) OVER(ORDER BY RATE_FROM_DATE)
       *(POW(1+(RATE/100)/365,(DAYS_BETWEEN(RATE_FROM_DATE, RATE_TO_DATE)+1)))
       AS NEW_AMOUNT       
FROM TRATES
JOIN (SELECT 32550.37 AS AMOUNT) AS TPARMS ON 1=1
;

任何帮助将不胜感激。

netezza
1个回答
0
投票
我现在没有时间执行实际的SQL,但是您必须使用这样一个事实,即利率的变动并不取决于变动的顺序,因此3天以3%的价格跟随,而是4天以2的价格跟随。 %的结果与2%的4天,然后3%的3天相同。你遵循吗?
© www.soinside.com 2019 - 2024. All rights reserved.