0

所以我有一个带有事务表的数据库,该表存储每个事务的唯一 ID#、客户 ID#、日期和其他几个特定于事务的变量。我正在尝试计算客户流失率:

  • 在给定的第 x 天,有 # 个活跃客户。
  • 从给定日期 x 30 天后,我们失去的活跃客户数量(从最初的 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 上拥有了那些带有有效订阅的客户 ID(因为 SomeDate 30 天内的任何交易都会有有效订阅),然后我可以使用 SomeDate + 30 天加入一个新的子选择并加入 CustomerID 以获得更新帐户的计数。

我关心的问题是: 1. 效率;我必须为我想要评估的每一天运行这个查询,并且我只会返回(如果我加入)更新的帐户#--所以我必须运行上面的查询,然后是一个带有 join 的查询,对于我想要活跃的每一天#-renewed#。

我更喜欢做的(但显然无法弄清楚如何)是运行一个输出这样的表的单个查询:

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

关键是续订帐户的数量基于与活动客户的客户 ID # 唯一 ID 的比较。即如果 Bill (ID#2) 和 Jim (ID# 4) 是两个活跃客户,我希望第二个“renewed w/in 30 #”列表反映 Jim 或 Bill 是否续订,而不是 Bobby Joe 在第二阶段。想法?

4

0 回答 0