2017-01-25 34 views
0

我正在尋找關於在SQL服務器中構建複合興趣模塊的最佳方法的建議。基本設置: 表:事務{TransID,MemberID,Trans_Date,Trans_Code,Trans_Value)。 表:利息{IntID,Int_eff_Date,Int_Rate}關於事務的SQL Server興趣計算

在利息表中,生效日期可能會有不同的費率 - 但永遠不會有重疊的日期。例如:

Int_Eff_Date  Int_Rate 
01/01/2016   7% 
01/10/2016   7.5% 
10/01/2017   8% 

我想根據交易日期和交易值計算利息,其中正確的利率是相對於交易日期應用的。

所以,如果表交易有:

TransID MemberID Trans_Date Trans_Value 
1   1   15/04/2016 150 
2   1   18/10/2016 200 
3   1   24/11/2016 200 
4   1   15/01/2017 250 

對於TRANSID 1,將利用7%15/04/2016直到30/09/2016(168天),從2016年1月10日至09/01/2017將使用7.%,然後從2007年10月1日到計算日期(輸入參數)將使用8%。

它會對所有交易應用類似的方法,將它們相加並顯示利息值。

我不知道我是否應該使用遊標,UDF等

+0

輸出應該是什麼樣子? –

+0

理想情況下,我想在每月月底(Trans_code 2)結束時向交易表寫入興趣交易。跨所有memberID。我還想爲UDF進行月中計算,因此輸入將是memberID,計算日期)。產出將爲交易總額(期間交易總額,利息直至計算日期)。 – Marc

+0

你能提供一個結果表應該是什麼樣子的例子嗎? – pacreely

回答

0

這應該提供你想要做一個大綱。

--Build Test Data 
CREATE TABLE #Rates(Int_Eff_Date DATE 
        , Int_Rate FLOAT) 
CREATE TABLE #Transactions(TransID INT 
          ,MemberID INT 
          ,Trans_Date DATE 
          ,Trans_Value INT) 

INSERT INTO #Rates  
VALUES ('20160101',7) 
     ,('20161001',7.5) 
     ,('20170110',8) 

INSERT INTO #Transactions 
VALUES 
(1,1,'20160415',150) 
,(2,1,'20161018',200) 
,(3,1,'20161124',200) 
,(4,1,'20170115',250) 


;WITH cte_Date_Rates 
    AS 
    (
    SELECT 
     S.Int_Eff_Date 
     ,ISNULL(E.Int_Eff_Date,'20490101') AS "Expire" 
     ,S.Int_Rate 
    FROM 
     #Rates S 
      OUTER APPLY (SELECT TOP 1 Int_Eff_Date 
         FROM #Rates E 
         WHERE E.Int_Eff_Date > S.Int_Eff_Date 
         ORDER BY E.Int_Eff_Date) E 
    ) 
SELECT 
    T.* 
    ,R.Int_Rate 
FROM 
    #Transactions T 
     LEFT JOIN cte_Date_Rates R 
      ON 
      T.Trans_Date >= R.Int_Eff_Date 
      AND 
      T.Trans_Date < R.Expire 
+0

謝謝 - 所以這正確顯示正確的利率爲交易日期。我們來做一筆交易。我需要計算每個利息期內的日期並應用正確的利率。因此2016年11月28日的交易時間爲100,起始費率爲7.5%。 IK需要檢查在此日期之後是否存在另一個利率,如果沒有,那麼計算很簡單,我們採用天數(計算日期至交易日期),並使用所確定的利率計算利息。 – Marc

+0

....如果存在另一個利率,那麼我們需要計算出從交易日到下一個利率的日期,在公式中應用匯率,將結果存儲在變量中。然後再次測試是否存在另一個利率變化,如果是,計算利率變化之間的天數,計算利率變化率,將其插入公式並將利息結果添加到變量中。繼續這樣做直到我們到達計算日期而沒有利率變化。合理? – Marc