我在MySQL中有以下两个表:
cr_customer | cr_affiliate
---------------------------------------------
CustomerID | AffiliateID
AccountStatus | CustomerID
SignUpDate | CreatedDate
CancelDate
ExpiredDate
通过这两个表,我需要获得以下信息:每个客户和每月的平均附属公司(自客户活跃以来的月份)。所以我需要一个如下结果:
Month | Average number of affiliates (for all the customers, so the total)
---------------------------------------------
1 | 0.5
2 | 1
3 | 1.4
4 | 1.6
月份将是已取消或过期日期与SignUpDate之间的差异。但我需要“追溯”地为所有过去的数据做到这一点。
我正在试图弄清楚是否可以使用SQL语句来完成它,并且不确定我是否必须将它带到ETL进程或存储过程。 这里有什么帮助? 下面是一个如何工作的例子:
cr_customer
1 | 15-01-2016 | 15-07-2016 | 2 | 07-03-2016 | 09-10-2016 | 3 | 05-07-2016 | | 4 | 21-01-2017 | | 23-02-2016
cr_affiliate
1 | 1 | 16-01-2016
2 | 1 | 21-05-2016
3 | 1 | 21-06-2016
4 | 2 | 2016年10月3日
5 | 2 | 2016年10月3日
6 | 2 | 2016年10月3日
7 | 2 | 2016年7月9日
8 | 3 | 2017年6月1日
9 | 4 | 2017年3月2日
10 | 4 | 2017年6月2日
11 | 4 | 22-02-2017
我需要一个中间表来猜测这些数字:
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
1 | 4 | 1
1 | 5 | 2
1 | 6 | 3
2 | 1 | 3
2 | 2 | 3
2 | 3 | 3
2 | 4 | 3
2 | 5 | 3
2 | 6 | 3
2 | 7 | 4
2 | 8 | 4
3 | 1 | 0
3 | 2 | 0
3 | 3 | 0
3 | 4 | 0
3 | 5 | 0
3 | 6 | 0
3 | 7 | 1
3 | 8 | 1
4 | 1 | 2
4 | 2 | 3
然后是最终结果,这很容易。
1 | 1.5
2 | 1.75
3 | 1.33
4 | 1.33
5 | 1.66
6 | 2
7 | 2.5
8 | 2.5
提前致谢!