2017-05-23 2 views
0

Ich habe diese Tabelle (dies ist Probe, ursprünglich etwa 800000 Zeilen):Gesamtbetrag der in den letzten paar Monaten in SQL verbrachte

purchase_datetime  customer_id value purchase_id 
    2013-01-08 17:13:29  45236262  92  2526373 
    2013-01-03 15:42:35  45236262  16  2565373 
    2013-05-08 17:40:13  45236262  42  2522373 
    2013-03-08 09:04:52  45236262  636  2563373 
    2013-12-08 12:12:24  45236262  23  2505573 
    2013-07-08 22:35:53  35536272  73  2526423 
    2013-07-08 09:52:03  35536272  4  5526373 
    2013-010-08 16:23:29  52626262  20  2226373 
... 
    2013-04-08 17:49:31  52626262  27  4526373 
    2013-12-09 20:40:53  52626262  27  4626373 

Jetzt muss ich die Gesamtmenge des verbrauchten (Wert) finden, indem der Kunde für die letzten 1 Monat, 3 Monate, 6 Monate und 12 Monate. Ich habe keine Ahnung, was mit datetime zu tun ist, um die letzten Monate auszuwählen.

Antwort

2

können Sie bedingte Aggregation verwenden:

select customer_id, 
     sum(case when purchase_datetime >= current_timestamp - interval '1 month' 
       then value else 0 
      end) as amount_1month, 
     sum(case when purchase_datetime >= current_timestamp - interval '3 month' 
       then value else 0 
      end) as amount_3month, 
     sum(case when purchase_datetime >= current_timestamp - interval '6 month' 
       then value else 0 
      end) as amount_6month 
. . . 
+0

Kann ich irgendwie max von Datetime verwenden, den letzten Tag zu finden? – jovicbg

+0

@jovicbg. . . Dies beantwortet die Frage, die Sie gestellt haben. Wenn Sie eine andere Frage haben, fragen Sie eine * neue * Frage. Das Ändern der Frage ist unhöflich, weil solche Änderungen vorhandene Antworten ungültig machen und Kommentare abziehen können. –

+0

Ich habe die Frage nicht geändert, ich dachte, vielleicht anstelle von current_timestamp kann ich Max von purchase_datetime verwenden, um den letzten Tag zu finden, nicht allgemein ... Es ist in Bezug auf Ihre Antwort, omg – jovicbg

Verwandte Themen