所以我有一个带有事务表的数据库,它存储每个具有唯一id#,customer id#,date和其他特定于事务的变量的事务。我试图计算客户流失因此:
我不知道这是否足够清楚。如果没有,让我试着改写:在过去的任何一天,我想要一个有效订阅的客户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是否在第二个时间内购买了订阅期。想法?