Zwei Felder gleichzeitig ueberpruefen

Hallo, ich wollte eine Abfrage machen in der er mir alle Zeilen ausgibt die einen höheren Wert haben als ihre Vorgängerzeilen.
Als Beispiel:
Zeile1: 1
Zeile2: 7
Zeile3: 3
Zeile4: 4
Zeile5: 8

So soll er mir folgendes ausgeben:
Zeile1: 1
Zeile2: 7
Zeile3: 8

Ich dachte mir ich schreibe eine Funktion die einen Wert gegen den maximalen Wert testet also:

SELECT X FROM A
WHERE FUNCTION(X) = TRUE;

und die Funktion dazu wuerde dann so aussehen:

FUNCTION ( PARAM ) RETURN RESULT
(
IF X >= MAX
(
MAX = X
RESULT= TRUE
)
ELSE
RESULT FALSE
)

aber der maximale Wert ist beim nächsten Funktionsaufruf ja wieder weg… … oder kann ich einen Wert irgendwie global speichern ?

Hoffe mir kann da jemand weiterhelfen.

Datenbanken arbeiten mit Mengen. Da gibt es erst einmal so keinen Vorgänger/Nachfolger. Außerdem ist Dein Beispiel falsch, es müßten ja dann Zeilen 2,4 und 5 sein, oder?


Egal, ich glaube zu verstehen, was Du willst:

test=*# select * from menge;
 id | zahl
----+------
  1 |    1
  2 |    7
  3 |    3
  4 |    4
  5 |    8
(5 Zeilen)

Zeit: 0,280 ms
test=*# select m2.* from menge m1, menge m2 where m2.id=m1.id+1 and m2.zahl > m1.zahl;
 id | zahl
----+------
  2 |    7
  4 |    4
  5 |    8
(3 Zeilen)

oder

test=# select m2.* from menge m1, menge m2 where m2.id=m1.id+1 and m2.zahl > (select max(zahl) from menge where id<m2.id);
 id | zahl
----+------
  2 |    7
  5 |    8
(2 Zeilen)

Wenn Du dazu noch die erste Zeile haben willst, böte sich ein UNION an.

Ich vertraue hier darauf, daß die ID-Spalte streng monoton um 1 ansteigt.

Hilft das weiter?

Ansonsten, warte auf 8.4, das wird (hoffentlich) windowing-Funktionen haben.

Andreas