Das fühlt sich an wie ein Lücken- und Inseln-Problem und Fensterfunktionen scheinen das richtige Werkzeug zu sein, aber ich kann kein funktionierendes Ergebnis erzielen.Die Zeilen finden, die zu einem Ereignis führen und sie als Sequenz behandeln
Meine Daten sieht wie folgt aus (Hinweis: GameID eine UUID ist und hier als Zähler zur besseren Lesbarkeit dargestellt):
GameID User Date Win
100 A 10/11/2012 0
101 A 10/12/2012 0
102 B 10/11/2012 0
103 B 10/13/2012 1
104 B 10/14/2012 0
105 C 10/10/2012 0
106 C 10/12/2012 0
107 C 10/13/2012 1
108 C 10/14/2012 0
109 C 10/15/2012 0
110 C 10/16/2012 0
111 C 10/17/2012 1
112 D 10/11/2012 0
113 D 10/13/2012 1
114 D 10/20/2012 0
115 D 10/21/2012 0
Ich bin auf der Suche zu erfassen (Anzahl/Aggregat in Array), um die Folge von Verlusten Ein Benutzer hat vor jedem Gewinn. Wenn Sie zum Beispiel Benutzer B betrachten, haben sie einen Gewinn, dieser Gewinn hat einen Verlust davor. Wenn Sie sich Benutzer C ansehen, gehen dem Gewinn mit ID 107 zwei Verluste voraus und dem Gewinn mit ID 111 gehen 3 Verluste voraus.
Ich bin auf Array-Aggregation array_agg
anwenden und die vorhergehenden verliert an einen Sieg anhängen. Letztlich möchte ich folgendes Ergebnis:
GameID User Date Win LosingStreak
103 B 10/13/2012 1 [102]
107 C 10/13/2012 1 [105, 106]
111 C 10/17/2012 1 [110,109,108]
113 D 10/13/2012 1 [112]
Ich habe mit partition by User order by date
zu spielen, aber ich brauche, um bei einem Sieg jede Partition „Reset“ und ich kann nicht meinen Kopf zu wickeln scheinen um jede Möglichkeit, es zu lösen. lead() und lag() sind auch keine Hilfe, weil ich die lead (x) brauche, wobei x für jede Partition eine variable Zahl ist.
Sehr schlau. Vielen Dank. – maxTrialfire