Durchschnittliche Anzahl an Tagen zwischen Daten

enti87

Neuer Benutzer
Beiträge
3
Hallo,

ich bin Student und habe eine kleine Testdatenbank aufgebaut und versuche immer ein paar typische Analyseprobleme zu lösen.

In meiner Datenbank habe ich Kunden und deren Einkäufe. Ich habe nun diverse Aggregatfunktionen berechnet und scheitere jetzt folgender Problemstellung - aller wie viel Tage kauft jeder Kunde ein.

Die Daten liegen wie folgt vor (ganz hinten habe ich mit Excel mal die Tage ausgerechnet):

OID CID orderDate
10592727 166 07.06.2013 436
10834758 166 17.08.2014
10539840 187 28.10.2012 211
10589684 187 27.05.2013 426
10820631 187 27.07.2014
10568750 204 07.03.2013 159
10765602 204 13.08.2013 161
10612328 204 21.01.2014 118
10684149 204 19.05.2014
10667686 220 09.09.2012 463
10528139 220 16.12.2013

Im Ergebnis sollte rauskommen:

CID Durschnittliche Tage
166 436
187 318,5
204 146
220 463

Wie kann ich das mit SQL machen? Jemand eine Idee? Datediff funktioniert ja nur mit 2 Werten und kann mir auch keinen AVG ausrechnen.

Vielen Dank
 
Werbung:
Wie kann ich das mit SQL machen? Jemand eine Idee? Datediff funktioniert ja nur mit 2 Werten und kann mir auch keinen AVG ausrechnen.

Vielen Dank

Über Window-Funktionen kannst Du via lag() die Differenz zum letzten Eintrag berechnen, über dieser Differenzen dann avg(). Ich denk mal, der M$SQL kann das. Falls noch Fragen sind zeige ich es Dir in PostgreSQL.
 
Das geht auch mit Hilfe eines Joins und einer Zeilennummerierung. Ich habs jetzt nur auf die Schnelle getestet:
Code:
WITH t AS (
SELECT   CID,
     orderDate,
     ROW_NUMBER() OVER (PARTITION BY CID ORDER BY orderDate) AS zeilennr
FROM   tabelle
)
SELECT   t1.CID,
     avg(datediff(day,t1.orderDate,t2.orderDate)) AS diff
FROM   t t1
LEFT JOIN t t2
ON     t1.CID = t2.CID
AND     t1.zeilennr = t2.zeilennr -1
GROUP BY t1.CID
ORDER BY t1.CID
Wenn das Problem noch aktuell ist, erläutere ich das auch gern.
 
Hallo.
Ja das thema ist noch aktuell.

Wollte mir über die uni noch mssql 2012 holen. Weil die lag Funktion nicht bei r2008 drin ist. Aber wenns auch so geht wärs cool.

Ich guck heute abend mal drüber.

Danke für die Antwort

Vg enti
 
Werbung:
Funktioniert super! Vielen Dank...

Habs mir noch bissl abgewandelt damit die Null - Werte replaced werden.

Vielen Dank ukulele!
 
Zurück
Oben