2016-10-27 5 views
1

Ich habe ein kleines Problem mit SQL SELECT. Ich mag zwei kontinuierliche Gruppen mit dem gleichen Wert in der Spalte nr an der Nummer: 1,'a' 2,'a, 3,'b' 4,'c' 5,'a' 6,'a' 7,'e' 8,'e' Nummerierung von Daten in SQL

Der Ausgang Ich mag:

1,'a',1 2,'a,,1 3,'b',2 4,'c',3 5,'a',4 6,'a',4 7,'e',5 8,'e',5

Ist es möglich, mit nur einem auserwählten zu tun? Ich muss es in Verticas SQL machen, da es keine Operationen auf Variablen in select unterstützt, also kann ich nicht einfach eine Variable deklarieren und irgendwie inkrementieren.

Antwort

2

Sie könnten CONDITIONAL_CHANGE_EVENT() verwenden, das ist ziemlich einfach. Grundsätzlich senden Sie die Spalte, in der Sie das Sequenzinkrement auslösen möchten, als Parameter ein und ordnen es im Fenster so an, wie Sie es benötigen. Es ist eine analytische Funktion von Vertica.

SELECT col1, 
     col2, 
     CONDITIONAL_CHANGE_EVENT(col2) OVER (ORDER BY col1) 
FROM mytable 
+0

funktioniert wie ein Charme, wirklich danke –

2

Sie können dies mit Fensterfunktionen tun. Ein Verfahren verwendet lag() und führt dann eine kumulative Summe, wenn der Wert ändert:

select t.col1, t.col2, 
     sum(case when col2 = prev_col2 then 0 else 1 end) over (order by col1) as newcol 
from (select t.*, 
      lag(col2) over (order by col1) as prev_col2 
     from t 
    ) t 
+0

Funktioniert gut, wirklich danke. :) –