首次购买日期后的平均回购率

时间:2013-09-23 11:26:22

标签: sql sql-server count

搜索博客,问题和答案时,似乎大部分内容与我的问题只是相关,但我从未真正回答过我的问题。因此,感谢花费数百万的时间来帮助!

我使用SQL Server管理工作室2008 R2。

我想比较一下客户的“平均回购率”。回购率(RPR)计算为自其首次订单日期起的订单数量。

样本表

  • CustomerID / OrderDate / VKR_Number
  • D10001 / 2013-01-04 / VKR-1
  • D10001 / 2013-05-01 / VKR-2
  • D10001 / 2013-05-11 / VKR-3
  • D10001 / 2013-08-01 / VKR-4

解释: 累计计数(重购): 自第一个订单以来的订单数量;这相当于订单总数减1(即第一顺序)

回购率(RPR):累积计数(重新购买)/ [时间间隔]

RPR在上表中举例说明: 客户D10001的累计RPR为

    自从他/她在OrderDate首次购买后的17周内
  • count(VKR)= 1' 2013-01-04'
  • 自他/她在OrderDate首次购买后的18周内
  • count(VKR)= 2' 2013-01-04'
  • 自他/她在OrderDate首次购买后的30周内
  • count(VKR)= 3' 2013-01-04'

最简单的版本(至少对于TSQL外行人)似乎是:

`Select CustomerID,  COUNT([VKR_]) over (Partition by customer, DATEDIFF(week, Min([OrderDate ]), [OrderDate ])) as CountOfOrders, DATEDIFF(week, Min([OrderDate ]), [OrderDate ]) as WeeksPassedSinceDateOfFirstPurchase`

期望的结果表看起来像

  • CustomerID / WeeksPassedSinceDateOfFirstPurchase / CountOfOrders
  • D10001 / 17/1
  • D10001 / 18/2
  • D10001 / 30/3

如果上述请求在TSQL中难以实现,我也很乐意得到像

这样的结果表
  • CustomerID / WeeksPassedSinceDateOfFirstPurchase / CountOfOrders
  • D10001 / 1/0
  • D10001 / 2/0
  • D10001 / 3/0
  • D10001 / 4/0
  • D10001 / 5/0
  • D10001 / 6/0
  • D10001 / 17/1
  • D10001 / 18/2
  • D10001 / 19/2
  • D10001 / 20/2
  • D10001 / 21/2
  • D10001 / 29/2
  • D10001 / 30/3

再次,非常感谢您的任何建议!并且道歉,如果我错过任何博客/答案,已经解决了我的问题。

1 个答案:

答案 0 :(得分:0)

这应该有用。

SELECT CustID
    ,DATEDIFF(ww,OrderDate,GETDATE()) 'WEEKS'
    ,(SELECT COUNT(1) 
       from Table t2 
       where t1.custID=t2.custID 
          and t2.OrderDate<=t1.OrderDate 
       GROUP BY t2.CustID)-1 as CountOrders
FROM TABLE t1
GROUP BY CustID,OrderDate
ORDER BY OrderDate

从问题来看,它看起来不像你想要一个平均数,只是一个数-1,如果不是这样,那么请澄清。这应该为您提供您要求的结果表。您可能希望将我的第二列和第三列合并为每周的平均订单,如果这是你得到的。