Как рассчитать среднюю частоту появления даты в SQL - PullRequest
2 голосов
/ 01 декабря 2010

Я пытаюсь создать запрос к следующей таблице (только соответствующая часть):

Create Table [Order] (
  OrderID int NOT NULL IDENTITY(1,1),
  CreationDate datetime NOT NULL,
  CustomerID int NOT NULL
)

Я хотел бы увидеть список CustomerID со средним числом дней для каждого клиента между заказами.Мне любопытно, может ли это быть сделано с помощью решения на основе чистого набора или если необходимо решение с таблицей курсора / температуры.

1 Ответ

3 голосов
/ 01 декабря 2010
;WITH base AS
     ( 
     SELECT  CustomerID,
             ROW_NUMBER() over (partition BY CustomerID ORDER BY CreationDate, OrderID) AS rn
     FROM     [Order]
     )
SELECT   b1.CustomerID,
         AVG(DATEDIFF(DAY,b1.CreationDate, b2.CreationDate) )
FROM     base b1
         JOIN base b2
         ON       b1.CustomerID=b2.CustomerID
         AND      b2.rn        =b1.rn+1
GROUP BY b1.CustomerID
...