2017-12-03 5 views
0

ビジネスを開始して以来、その顧客の収益を中継している特定の月の顧客データを克服するためのデータ操作の概念的な問題があります(これは重要なポイントです) 。私はいつも最後のレポートを取ってそれを見せなければいけません。そうでなければ私はデータを倍増しています。 私は毎月の収入動向を見せていますが、問題は、顧客がある月に収入を表示しなかった場合、次の月に収入に前月の収入が含まれない場合です。だから、基本的に、私はその月に収入が報告されていないときでも、顧客の収入を次の月に引き継ぐ方法を見つけようとしています。私はこれをグラフで視覚化しようとしています。月間データ損失のトレンドを可視化する

これは、データベース内のデータ構造の一例である:

date |  customer | revenues 
08/2017  A   100 
08/2017  B   125 
09/2017  A   200 
09/2017  B   200 
10/2017  A   450 
10/2017  B   220 
10/2017  C   180 
11/2017  A   700 
11/2017  C   250 

現在の結果:

08/2017 - total 225 - A 100, B 125 
09/2017 - total 400 - A 200, B 200 
10/2017 - total 850 - A 450, B 220, C 180 
11/2017 - total 880 - A 700, C 180 

募集結果:

08/2017 - total 225 - A 100, B 125 
09/2017 - total 400 - A 200, B 200 
10/2017 - total 850 - A 450, B 220, C 180 
11/2017 - total 1170 - A 700, B 220, C 180 

私は何を私がすべき思ったんだけど私はPostgreSQLを使用するか、視覚化ツールを使用しようとしています。

毎月適用されるデータにすべての顧客の最新収入(その月のその顧客のデータが存在しない場合は、繰越しを含む)を自動的にモデル化することができます(ビューまたはその他の方法にかかわらず)。

答えて

0

PostgreSQLで次のようなクエリを使用してビューを作成することができます。

SELECT 
     date_t, 
     COALESCE(sum_a,0) + COALESCE(sum_b,0) + COALESCE(sum_c,0) Total, 
     SUM_A, 
     SUM_B, 
     SUM_C 
FROM 
     (SELECT 
       date_t, 
       CASE 
         WHEN LAG(sum_A,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_A IS NULL 
         THEN LAG(sum_A,1) OVER (ORDER BY date_t) 
         ELSE sum_A 
       END SUM_A, 
       CASE 
         WHEN LAG(sum_B,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_B IS NULL 
         THEN LAG(sum_B,1) OVER (ORDER BY date_t) 
         ELSE sum_B 
       END SUM_B, 
       CASE 
         WHEN LAG(sum_C,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_C IS NULL 
         THEN LAG(sum_C,1) OVER (ORDER BY date_t) 
         ELSE sum_C 
       END SUM_C 
     FROM 
       (select 
         date_t, 
         SUM (CASE 
           WHEN customer = 'A' 
           THEN revenues 
         END) sum_A, 
         SUM (CASE 
           WHEN customer = 'B' 
           THEN revenues 
         END) sum_B, 
         SUM (CASE 
           WHEN customer = 'C' 
           THEN revenues 
         END) sum_C 
       FROM 
         yourtable 
       GROUP BY 
         date_t 
       ) s1 
     )   s2 
ORDER BY 
     date_t; 

DEMO

前の行のためのLAG()機能をチェック - あなたのケースで合計。