Zeilen Vergleichen

Hallo,

habe eine Tabelle calls.
Mit den Spalten ID, index, state.
Es gibt calls die z.B. sieben mal untereinander in der Tabelle sind.
Dann bleibt die ID gleich, der Index erhöht sich jeweils um1 und in state stehen Werte zwischen 1 und 12.
Ich brauche eine Abfrage die mir alle calls zeigt, bei denen auf den state mit dem wert 6 in der nächsten zeile der state 8 folgt.
Wie geht sowas?

Beispiel:

id index state
4711 1 1
4711 2 4
4711 3 3
4711 4 6

Gruß

TCR



test=*# select * from status ;
  id  | index | state
------+-------+-------
 4711 |     1 |     1
 4711 |     2 |     4
 4711 |     3 |     3
 4711 |     4 |     6
 4711 |     5 |     8
(5 rows)

test=*# select s1.* from status s1 left join status s2 on (s1.id=s2.id) where s1.index+1=s2.index and s2.state=8;
  id  | index | state
------+-------+-------
 4711 |     4 |     6
(1 row)

Andreas

Danke für die rasche Antwort,
Da stimmt aber wohl was noch nicht.
Villeicht habe ich mich falsch ausgedrückt.
Ich brauche alle die Einträge, bei denen es zur ID in zwei aufeinanderfolgenden Zeilen die Wert 6 und 8 in der Spalte state gibt.

Dein Beispiel ist schon mal offensichtlich schlecht gewählt, ja.

Außerdem solltest Du Dich damit auseinandersetzen, daß Datenbanken mit Mengen hantieren, deren Elemente voneinander unabhängig sind. Also, Zeilen vorher/nachher ist im allgemeinen Bullshit. Eine Sortierung erfolgt bei der Ausgabe, das Auswählen der Daten selbst nach einem Kriterium “die Zeile vorher möge bitte diese und jene Eigenschaft haben” ist eher schlecht.

Andreas

Schon klar,

die Überlegung ist die:
es gibt einen eindeutigen Bezeichner für den Call, nämlich ID.
Pro ID gibt es mehrere Indexeinträge.
D.h. ich suche die Einträge, bei denen in der ID jeweils der gliche wert steht, und für diese ID auf den Statewert 6 unmittelbar( mit einer Indexerhöhung um 1) der Statewert 8 folgt.

6 + 1 = 7 != 8

Hmmm,

ich lerne eigentlich gerne.
Habe allerdings immernoch den Eindruck, dass ich falsch verstanden werde.
Ich muss doch nur wissen ob zur ID XY die werte 6 und 8 der Spalte state gemäß der Spalte index direkt aufeinander folgen.
In der Spalte index werden ja zu jedem Call mehrere Werte hochgezählt.
Das ganze stammt aus einer Telefonanlage und ich kann an der Datenstruktur nichts ändern.

Was genau ist denn an meinem Vorschlag Deiner Meinung nach falsch?

Andreas