MySql复杂查询追溯

时间:2017-03-15 11:21:10

标签: mysql sql stored-procedures

我在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

customerID | SignUpDate | CancelDateDate | EXPIREDATE

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

affiliateID | customerID | CreatedDate

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

我需要一个中间表来猜测这些数字:

customerID |月|联盟成员数

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

提前致谢!

0 个答案:

没有答案