2010-12-01 2 views
2

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

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

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

+0

Слишком плохо SQL Server не поддерживает LEAD или LAG ...:/ – 2010-12-01 17:23:15

ответ

3
;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 
Смежные вопросы