2016-05-31 10 views
0

Ich habe eine Tabelle wie dieseKein Mal einen Wert in einer Tabelle geändert Count

uid key value 
--------------- 
125 'saf' True 
152 'asd' False 
152 'asd' True 
162 'asd' False 
162 'asd' False 

Ich brauche die Anzahl, wie oft ein Schlüssel zu erhalten, ist aus obiger Tabelle geändert.

zum Beispiel für die Taste 'asd' Ausgabe:

uid key count 
--------------- 
152 'asd' 1 
162 'asd' 0 
+1

Sie benötigen eine Spalte, die die Reihenfolge angibt. . . ein Erstellungsdatum oder eine ID oder etwas. SQL-Tabellen repräsentieren * ungeordnete * Mengen. –

Antwort

2

SQL-Tabellen repräsentieren ungeordnete Sets. Deine Frage ergibt also keinen Sinn, weil sie eine Reihenfolge der Reihen beinhaltet und es keine offensichtliche Ordnung gibt. Lassen Sie mich annehmen, dass einige Spalte diese Information haben (sagen wir eine automatisch erhöhte id oder Erstellungsdatum).

Sie können lag() gefolgt von einer bedingten Summe verwenden. In RedShift, ich denke, das wie folgt aussieht:

select uid, key, 
     sum(case when prev_value is null or prev_value <> value then 1 else 0 end) as num_changes 
from (select t.*, 
      lag(value) over (partition by uid, key order by ??) as prev_value 
     from t 
    ) t 
group by uid, key; 

Die ?? ist die Spalte, die die Reihenfolge der Zeilen angibt.