尝试用PHP和MySQL db计算客户流失率

时间:2013-11-07 20:50:51

标签: php mysql

所以我有一个带有事务表的数据库,它存储每个具有唯一id#,customer id#,date和其他特定于事务的变量的事务。我试图计算客户流失因此:

  • 在给定的第x天,有#个活跃客户。
  • 从给定日期起30天x我们失去了活跃客户数#(从原始日x开始)。 (所以我试图跟踪没有新交易的确切客户)
  • 我希望能够在一年中的每一天都运行此查询。

我不知道这是否足够清楚。如果没有,让我试着改写:在过去的任何一天,我想要一个有效订阅的客户ID列表(我们的订阅是30天)然后我想要计算这些客户ID中有多少更新他们的订阅在接下来的30天内。

我已经运行了一些查询,但我所做的一切似乎效率都很低。例如:

 //begin pseudo code
 SELECT   CustomerID
 FROM     Transaction
 WHERE    TransactionDate
 <        @SomeDate - INTERVAL 1 DAY
 AND      TransactionDate
 >        @SomeDate - INTERVAL 30 DAY

所以现在我在SomeDate上有那些w /活跃订阅的客户ID(因为在SomeDate的30天内任何交易将有一个有效的订阅)我可以加入一个新的子选择与SomeDate + 30天并加入CustomerID获取续订帐户的数量。

我关心的问题是:1。效率;我必须为我想评估的每一天运行此查询,并且我只返回(如果我加入)续订的帐户# - 所以我必须运行上面的查询,然后查询w / join ,每天我都想活跃#-renewed#。

我更愿意做的事情(但显然无法弄清楚如何)是运行一个输出如下表格的查询:

|SomeDate | Active Cust# | Renewed w/in 30 # |  
---------------------------------------------- 
|  10/1   |     123      |      115          | 
---------------------------------------------- 
|  10/2   |     127      |      112          |
----------------------------------------------  
|  10/3   |     115      |      108          |
----------------------------------------------  

关键是更新帐户的数量是基于与活跃客户#city ids的客户ID进行比较。即如果Bill(ID#2)和Jim(ID#4)是两个活跃的客户,我希望第二个“更新w / 30#”列表反映Jim或Bill是否更新,而不是Bobby Joe是否在第二个时间内购买了订阅期。想法?

0 个答案:

没有答案