2010-12-01 13 views
2

Ich versuche, eine Abfrage auf der folgenden Tabelle (relevanten Teil nur) zu erzeugen:Wie durchschnittliche Datum Auftrittshäufigkeit in SQL berechnen

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

Ich mochte eine Liste von CustomerIDs mit jedem Kunden des durchschnittlich sehen Anzahl der Tage zwischen Bestellungen. Ich bin gespannt, ob dies mit einer reinen Set-basierten Lösung getan werden kann oder ob eine Cursor/Temp-Tabellenlösung notwendig ist.

+0

Schade, SQL Server nicht unterstützt LEAD oder LAG ...:/ –

+1

Wenn ein Kunde 4 Aufträge an 1 Tag und dann eine weitere 5 Tage später, was ist ihr Durchschnitt? Ist es "(0 + 0 + 0 + 5)/4 = 1.25"? –

+0

Wenn wir Bruchdatumsunterschiede zulassen, denke ich, dass wir in Ordnung sein werden, da es realistisch gesehen immer einen gewissen Zeitunterschied (Minuten) zwischen den Kundenaufträgen gibt. –

Antwort

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 
Verwandte Themen