Gruppierungskennung für sortierte Tabelle erstellen

Hallo,
ich bin ein Neuling bei postgreSQL und auch noch nicht so versiert in der SQL-Programmierung… .
Ich habe folgendes Problem für eine sehr, sehr große Datenmenge zu lösen:

Tabelle1
ID Wert
1 A
2 B
3 B
4 C
5 B
6 B

Zieltabelle
GrpKennung ID Wert
1 1 A
2 2 B
2 3 B
4 4 C
5 5 B
5 6 B

Gegeben ist die sortierte Tabelle1 (mit weiteren hier nicht dargestellten Spalten). Daraus möchte ich meine Zieltabelle erstellen, so dass ich in einem nächsten Schritt über die GrpKennung gruppieren kann.
Die Zieltabelle ergibt sich aus der “Regel”:
GrpKennung= ID, wenn Wert <> Wert_davor sonst GrpKennung = GrpKennung_davor

Kann mir jemand einen zeitoptimierten SQL-Code für eine sehr große Datenmenge dafür nennen?
Ich schrecke noch davor zurück, mit einer Funktion alle Zeilen zu durchlaufen, um die GrpKennung zu setzen. Oder ist das Vorgehen doch sinnvoll?

Herzlichen Dank für Eure Tipps im Voraus!
-dodo

Welche Version ist am Start?

PG am 8.4 besitzt windowing-functions, damit solltest Du zum Ziel kommen.


Andreas

Hallo Andreas,

ich habe die Version 1.8.4.

Wie funktioniert das mit den “windowing-functions”?

Besten Dank,
–dodo

Diese Version gibt es nicht.


Andreas

Sorry… die mir vorliegende Version ist 8.3.

–dodo

Dann entweder auf 8.4 oder 9.0 updaten und sich an PostgreSQL: Documentation: Manuals: PostgreSQL 9.0: Window Functions erfreuen oder halt eine plpgsql-function schreiben.


Andreas

Besten Dank für den Tipp!

Updaten ist bei mir schwierig…
gibt es auch eine elegante Lösung ohne diese window-functions?

–dodo

Eine elegante Lösung gibt es nicht. Eine mögliche Lösung hat dir akretschmer allerdings genannt: eine eigene Funktion schreiben.

Also muss in der Funktion jede Zeile der Tabelle einzeln durchlaufen werden? - Schade ich hatte gehofft, dass es ein schnelleres SQL-Konstrukt gibt… .

Danke für Eure Tipps,
–dodo

Das ist doch eh nötig, um mit der Vorgängerzeile zu vergleichen.

Andreas