2017-12-03 2 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에서 다음과 같은 쿼리를 사용하여보기를 만들 수 있습니다.

DEMO

이전 행의 LAG() 기능 검사

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; 

- 귀하의 경우 합계한다.