我有一个概念性的问题,即如何操纵数据来克服某个月内缺少的客户数据,从而在客户开始营业时转发该客户的收入(这是一个关键点)。我总是需要拿最后一个报告,只显示它,否则我会加倍数据。 我每月都会显示收入趋势,问题是如果客户没有向我们展示某个月的收入,那么下个月的收入将不包括该客户的收入。月。所以基本上,即使当月没有收入报告,我也试图弄清楚如何将客户的收入延续到接下来的几个月。我试图在图表中将其可视化。
这是数据库中数据结构的一个示例:
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或使用可视化工具。
如何自动建模(无论是在View还是其他方法中),以便每月应用的数据包含所有客户'最新收入(如果当月该客户的数据不存在,则将其转发)。
答案 0 :(得分: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;
LAG()
函数检查上一行 - 在您的情况下是总和。