每个产品的重复订单之间的平均天数间隔

Average day gap in between a repeat order for each product

谁能帮我找出产品级别上第一次和第二次购买之间的平均时间。

这是我写的-

Select A.CustomerId,A.ProductId , A.OrderSequence, (Case WHEN OrderSequence = 1 THEN OrderDate END) AS First_Order_Date,
MAX(Case WHEN OrderSequence = 2 THEN OrderDate END) AS Second_Order_Date
From
(
Select t.CustomerId, t.ProductId, t.OrderDate,
Dense_RANK() OVER (PARTITION BY t.CustomerId, t.ProductId ORDER BY OrderDate Asc) as OrderSequence  
From Transactions t (NOLOCK)
Where t.SiteKey = 01
Group by t.CustomerId, t.ProductId, t.OrderDate)
A
Where A.OrderSequence IN (1,2)
Group By A.Customer_Id, A.ProductId, A.OrderSequence, A.OrderDate

示例数据:

看起来像行编号,LEAD 应该可以解决这个问题。

  • 不要使用 NOLOCK 除非你真的知道你在做什么
  • 尚不清楚您是否希望结果也按 CustomerId 进行分区。如果没有,您可以在查询中的任何地方删除它
SELECT
  A.CustomerId,
  A.ProductId,
  AVG(DATEDIFF(day, OrderDate, NextOrderDate))
FROM
(
    SELECT
      t.CustomerId,
      t.ProductId,
      t.OrderDate,
      ROW_NUMBER() OVER (PARTITION BY t.CustomerId, t.ProductId ORDER BY OrderDate) AS rn,
      LEAD(OrderDate) OVER (PARTITION BY t.CustomerId, t.ProductId ORDER BY OrderDate) AS NextOrderDate
    FROM Transactions t
    WHERE t.SiteKey = '01'
) t
WHERE t.rn = 1
GROUP BY
  t.Customer_Id,
  t.ProductId;