2016-12-21 5 views
0

Ich möchte den Tag Unterschied zwischen dem ersten Besuch und dem zweiten Besuch berechnen; zweiter Besuch und dritte Besuche usw. pro Kunde mit SQL. Bitte helfen.So berechnen Sie den Datumsunterschied zwischen verschiedenen Besuchen mit SQL

Zum Beispiel besuchte Kunde A dreimal auf 2016-01-03, 2016-01-06 und 2016-05-30, während Kunde B zehn Mal mit unterschiedlichen Daten besucht.

Abfrage

With cte as (Select customerid, VisitDate, 
        ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY VisitDate) as rownum 
      FROM visitTable V) 
Select CustomerID, VisitDate, rownum, DateDiff(D,R1.VisitDate, R2.VisitDate) as NoOfDays 
FROM cte R1 
LEFT JOIN cte R2 ON R1.CustomerID = R2.CustomerID AND R1.rownum = 1 AND R2.rownum = 2 

Danke

+3

Welche DBMS? SQL Server? MySQL? Orakel? Etwas anderes? Was ist Ihre Tabellenstruktur? [Helfen Sie uns, Ihnen zu helfen.] (Https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) – Siyual

+0

Bitte zeigen Sie uns, was Sie haben versucht. –

+0

können Sie Daten voneinander subtrahieren - dies ergibt eine (gebrochene) Anzahl von Tagen. – Randy

Antwort

1

Ich glaube, Sie auf die richtige Idee ziemlich nahe waren. Ihr Join muss Zeilennummern vergleichen. Ich habe auch die Reihenfolge Ihres Datums diff geändert, aber ich habe es nicht getestet.

With cte as (
     Select customerid, VisitDate, 
       ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY VisitDate) as rownum 
     FROM visitTable V 
) 
Select R1.CustomerID, R1.VisitDate, R1.rownum, 
     DateDiff(D,R2.VisitDate, R1.VisitDate) as NoOfDays --this is days since last visit 
FROM cte R1 --current row 
LEFT JOIN cte R2 --previous visit - will result in null days for 1st row. 
     ON R1.CustomerID = R2.CustomerID 
     AND R1.rownum - 1 = R2.rownum 
order by R1.CustomerID, R1.VisitDate; 
Verwandte Themen