2

搜索博客,问题和答案,似乎大多数都我的问题有关,但从未真正回答过我的问题。因此,感谢任何花时间提供帮助的人一百万!

我使用 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 = '2013-01-04' 首次购买后的 17 周内计数 (VKR) = 1
  • 自他/她在 OrderDate = '2013-01-04' 首次购买后的 18 周内计数 (VKR) = 2
  • 自他/她在 OrderDate = '2013-01-04' 首次购买后的 30 周内计数 (VKR) = 3

最简单的版本(至少对于 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
  • ETC
  • D10001 / 17 / 1
  • D10001 / 18 / 2
  • D10001 / 19 / 2
  • D10001 / 20 / 2
  • D10001 / 21 / 2
  • ETC
  • D10001 / 29 / 2
  • D10001 / 30 / 3

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

4

1 回答 1

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,如果不是这种情况,请澄清。这应该会给你你要求的结果表。如果这是您所得到的,您可能希望将我的第二列和第三列合并为每周的平均订单量。

于 2013-09-23T11:51:44.667 回答