2017-06-21 11 views
0

私は、各ユーザの日付カラムと天びんカラムを持っています。ユーザーがトランザクションを作成するたびに、新しい行がこのテーブルに追加されます。ユーザーが1日中に15回の取引を行い、5日間に取引を全く行わないことがあります。日付を比較し、それらの差を計算する、postgres

この1

date    balance 
2017-06-01    95.63 
2017-06-01    97.13 
2017-06-01    72.14 
2017-06-06    45.04 
2017-06-08    20.04 
2017-06-09    10.63 
2017-06-09    -29.37 
2017-06-09    -51.35 
2017-06-13    -107.55 
2017-06-13    -101.35 
2017-06-15    -157.55 
2017-06-16    -159.55 
2017-06-17    -161.55 

同様の目標は、同じ日中に行われた正と負のトランザクションを選択し、その平均値や最小値を計算し、次の日transaction.If 1なしのトランザクションとしてそれを考慮することです前日の金額を使用する必要があります。

1ヶ月に1日ごとに金利を計算し、残高が更新されていないことを意味し、前日の残高を使用する必要があります。 仮に私のテーブルには、私は、重複した日を逃すとグループされた当時を追加した

date balance 
1/6/2017 72.14 
6/2/2017 72.14 
6/3/2017 72.14 
6/4/2017 72.14 
6/5/2017 72.14 
6/6/2017 45.04 
7/6/2017 45.04 
8/6/2017 20.04 
9/6/2017 -51.35 
10/6/2017 -51.35 
11/6/2017 -51.35 
12/6/2017 -51.35 
13/06/2017 -107.55 
14/06/2017 -107.55 
15/06/2017 -157.55 
16/06/2017 -159.55 
17/06/2017 -161.55 

のようになります。

これが完了したら、プラスの平日の日数を選択することができます。 8日間、平均的な正のバランスを計算し、それに0.4%を掛けます。

8*58.8525*0.004=0.23 

負のバランスで同じことを行う必要があります。負の残高日数の異なる金利数を有する。当時の平均負の残高と8.49%を掛け合わせたものである。

9*-99.90555556*0.00849=-0.848 

だから私の予想結果は、ちょうどこれら二つの列

Neg  Pos 
-0.848  0.23 

私はそれpostgresの中にいることをどのように行うことができますを持っているのですか?関数OVERLAPは、日付を指定する必要があるので、実際には役に立ちません。私はどのように

  1. ループの日を知らないと、重複があるかどうかを確認するだけでなく

  2. 欠落している日を見て、これらの欠落日ごとに前回の残高を使用してください。

答えて

2

。これを試してみてください、あなたのテーブル名を持つテーブルを交換してください

with cte as 
(
    Select "date" as date 
     ,min(balance) as balance 
     ,lead("date") over(order by "date") next_date 
     ,Coalesce(ABS("date" - lead("date") over(order by "date")),1) date_diff 
from table 
    group by "date" 
), 
cte2 as 
(
    Select date_diff*balance as tot_bal , date_diff 
    from cte 
    Where balance > 0 
), 
cte3 as 
(
    Select date_diff*balance as tot_bal , date_diff 
    from cte 
    Where balance < 0 
) 

Select (sum(cte2.tot_bal)/sum(cte2.date_diff)) * 0.004 as pos 
,(sum(cte3.tot_bal)/sum(cte3.date_diff)) * 0.00849 as neg 
from cte2 
    ,cte3; 
関連する問題