Vergleich zwischen Eintrag und dem Eintrag davor? (Zustandsänderung)

Huhu,
ich habe nun ein paar stunden damit verbracht für eine neue Herausforderung eine Lösung zu finden, das aber bisjetzt vergebens… :confused:

Ich wollte einfach mal Wissen ob es möglich ist, zwei Werte in einer Tabelle zu vergleichen (harhar, ja das geht), aber es sollte der eintrag x mit x-1 verglichen werden, wenn zwischen diesen 2 Werten eine Differenz besteht, einen Zähler um 1 erhöhen, und mir später die Gesamtanzahl anzeigen.

Dachte schon an eine Funktion, nur auch dort stehe ich wieder vor der Frage, wie Frage ich auf einen/oder den letzten Eintrag ab?

Gegeben wäre Folgendes Konstrukt (aus einem Join von 2 Tabellen):

Wert | Datum                  | ID
-----+------------------------+-----
  70 | 2011-03-26 23:55:00+01 | 1000
  80 | 2011-03-26 23:56:00+01 | 1001
  80 | 2011-03-26 23:57:00+01 | 1002
  70 | 2011-03-26 23:58:00+01 | 1003

In diesem kleinen Ausschnitt hätte ich 2 Zustandänderungen, diese würde ich wenn es möglich ist gerne aus der PG bekommen, anstand erst 20k Einträge mittels PHP zu bearbeiten.

Gruss,
Christian

Dafür sind (seit Version 8.4) die Window Functions da

SELECT wert as aktueller_wert,
       lag(wert) over (order by wert) as vorheriger_wert,
       lag(wert,2,null) over (order by wert) as vor_vorheriger_wert,
       lead(wert) over (order by wert) as naechster_wert
FROM your_table

Mehr dazu im Handbuch:
http://www.postgresql.org/docs/current/static/tutorial-window.html

Huhu,
wollte hier nochmals Danke sagen, bin erst jetzt wieder nach Hause gekommen.

Werde das mal nachlesen und ausprobieren :slight_smile:

Gruss,
Christian