2017-12-23 33 views
0

私はPostgreSQLを使用しており、請求サイクルのテーブルと請求サイクルのテーブルを持っています。SQLを使用して金利を計算する

私は、各請求サイクルの最終支払日の後に残った金額に基づいて金利を計算する方法を理解しようとしています。問題は、返済が行われるたびに、それ以降に残った金額で利息を計算する必要があるということです。

このクエリの作成に関する私の考えは次のとおりです。請求サイクルの最終支払日から今日までのすべての日付のデータを作成します。パーティショニングを使用して、最初の日付の残量を取得します。 2番目の日付では、前の行の金額を使用して金利を追加し、この金利を計算します。

残念ながら私は思考に立ち往生しており、これをクエリにする方法を理解できません。

ここでは、理解しやすくするためのサンプルデータを示します。

請求サイクル:

id |  ends_at  
-----+--------------------- 
1 | 2017-11-30 
2 | 2017-11-30 

支払い:

amount | billing_cycle_id | type |   created_at   
-----------+------------------+---------+---------------------------- 
6000.0000 |    1 | payment | 2017-11-15 18:40:22.151713 
2000.0000 |    1 |repayment| 2017-11-19 11:45:15.6167 
2000.0000 |    1 |repayment| 2017-12-02 11:46:40.757897 

だから私たちが見る場合、利用者は、19日に返済をしたので、興味のポストの日付(2017年11月30日)を終了未払い額、だから、30日から2日までは4000で毎日計算されますが、2日からは2000年にのみ利子を計算する必要があります。

利息計算(今日は2017年12月4日である):

date | amount | interest 
------------+---------+---------- 
2017-12-01 | 4000 |  100   // First day of pending dues. 
2017-12-02 | 2100 |  52.5   // Second day of pending dues. 
2017-12-03 | 2152.5 | 53.8125   // Third day of pending dues. 
2017-12-04 |2206.3125|     // Fourth's day interest will be added tomorrow 

答えて

0

あなたのデータがあまりにも希薄です。時間が経つとクエリがかなり複雑になるため、このクエリを記述する必要はありません。時間の経過とともに金利が変化するとどうなりますか?

テーブル自体(またはそれをどのように構造化するかによっては、セカンダリテーブル)は、入金/出金が行われるたびに追加された残高を持つことができます。 (私はこのテーブルをアドオンにすることをお勧めします)そうでなければ、計算とアカウンティングの両方を自分よりもはるかに難しくしています。ここで問題を提示したとしても、計算を行うのに十分な情報がありません。 (金利が不足している)そうである場合、ストアドプロシージャは複雑すぎるでしょう。複雑なものはバグを意味し、あなたが自分のお金について話しているときにバグについて心配する人がいます。

関連する問題