2016-08-17 1 views
-2

Ich habe typische E-Commerce-Daten mit mehreren Stammkunden, wie zB:Wie kann ich die Dauer zwischen Bestellungen aus E-Commerce-Daten erhalten?

customer_id, order_date 
1,    2016.05.01 
2,    2016.05.02 
3,    2016.05.03 
1,    2016.05.04 
2,    2016.05.05 
1,    2016.05.06 

Und ich möchte Ausgabe etwas wie:

customer_id,  1,   2,   3, 
1     2016.05.01 2016.05.04 2016.05.06 
1     2016.05.02 2016.05.05 
1     2016.05.03 

Und dann kann ich einfach die Zeit zwischen dem ersten und dem zweiten Kauf erhalten, usw. . Dies ist in einer MySQL-Datenbank, wenn es eine sQL-Abfrage ist, die einfach ist, zu

Danke, Kev

+1

Möchten Sie unbedingt die Pivot-Tabelle wie in Ihrer Frage angegeben erzeugen oder möchten Sie die Anzahl der Tage zwischen den verschiedenen Aufträgen in einer Liste berechnen? SO hat viele Fragen zum Pivotieren in mysql ... – Shadow

+0

Wie viele Bestelldaten möchten Sie in einer einzigen Zeile zurückgeben? – shawnt00

+0

Ich sehe keine Dauer in diesem Ergebnis – Strawberry

Antwort

2

in MySQL wahrscheinlich th Der einfachste Weg besteht darin, Variablen und bedingte Aggregation zu verwenden:

select customer_id, 
     max(case when rn = 1 then order_date end) as order_date_1, 
     max(case when rn = 2 then order_date end) as order_date_2, 
     max(case when rn = 3 then order_date end) as order_date_3 
from (select t.*, 
      (@rn := if(@c = customer_id, @rn + 1, 
         if(@c := customer_id, 1, 1) 
         ) 
      ) as rn 
     from t cross join 
      (select @c := -1, @rn := 1) params 
     order by customer_id, order_date desc 
    ) t 
group by customer_id; 
+0

Wow, danke! Das ist so nah dran, genau das zu sein, was ich will !! Vielen Dank. Das sql sieht für mich chinesisch aus, aber es funktioniert – kevando

Verwandte Themen