2016-08-03 31 views
0

Ich versuche, die Summe des Betrags für eine 'ID' 365 Tage nach dem 'DT' zu finden. Unten ist ein Beispiel aus den Daten, an denen ich gerade arbeite. Die folgende Tabelle enthält die Daten, wann der Kauf getätigt wurde, die ID und den Betrag. Ich wollte den Betrag berechnen, der von einer ID ausgegeben wurde, die 365 Tage nach dem 'DT' zurückliegt. Jede Hilfe dazu wird geschätzt. Vielen Dank.Summe für nachfolgende 365 Tage ab einem Kaufdatum für Benutzer

DT  ID AMT 
1/17/15 1 31.74 
1/23/15 1 14.33 
1/25/15 1 21.76 
3/5/15 1 150 
6/12/15 1 60 
4/23/16 1 16.86 
4/25/16 1 60 
7/1/16 1 15.57 
2/26/15 2 61.9 
3/1/15 2 15 
2/28/16 2 25 

Ich möchte meine Ausgabe

DT  ID AMT  outstanding_amt 
1/17/15 1 31.74 31.74 
1/23/15 1 14.33 46.07 
1/25/15 1 21.76 67.83 
3/5/15 1 150  217.83 
6/12/15 1 60  277.83 
4/23/16 1 16.86 76.86 
4/25/16 1 60  136.86 
7/1/16 1 15.57 92.43 
2/26/15 2 61.9 61.9 
3/1/15 2 15  76.9 
2/28/16 2 25  40 

ich sum(amt) over(partition by user_id) haben versucht zu sein, aber das gibt mir kumulative Summe für alle Termine. Ich weiß nicht, wie es

Antwort

2

Eine Methode mit dem Datum Bedingung Bedingung ist eine korrelierte Unterabfrage:

select t.*, 
     (select sum(t2.amt) 
     from t t2 
     where t2.id = t.id and 
       t2.dt <= t.dt and 
       t2.dt > t.dt - interval '365' day 
     ) as outstanding_amt 
from t; 

Dies könnte mit einem Index auf (id, dt, amt) angemessene Leistung.