Problem mit lag und lead.

Hallo,

ich habe eine Abrage in der ich den vorletzten, letzten und folgenden Wert aus der DB auslese.
Funktioniert auch, nur in einzelnen Zeilen wird der vorletzte und folgende Datensatz an ganz falscher Stelle geholt.
Meine Abfrage lautet:

SELECT 
  variablen.id, 
  variablen.varid, 
  variablen.updatezeit,
  lag (variablen.value) over(),
  variablen.value, 
  lead (variablen.value) over(),
  variablen.value - lag (variablen.value) over() as diff,
  lag (variablen.value) over() + ((lead (variablen.value) over() - lag (variablen.value) over()) / 2) as new
FROM 
  public.variablen
WHERE variablen.varid = 48020
ORDER BY
  variablen.varid ASC;

als Ausgabe bekomme ich folgendes:

id	varid	updatezeit	lag	value	lead	diff	new
24466	48020	09.03.2014 23:30	928,03	928,11	928,2	0,0799561	928,1150208
25575	48020	09.03.2014 23:45	928,11	928,2	928,28	0,0900269	928,1950073
26723	48020	10.03.2014 00:00	928,2	928,28	1107,51	0,0800171	1017,855011
27734	48020	10.03.2014 00:15	1564,65	928,29	1564,72	-636,36	1564,684998
28818	48020	10.03.2014 00:30	1568,83	928,44	928,5	-640,39	1248,664978
29863	48020	10.03.2014 00:45	928,44	928,5	928,57	0,0599976	928,5050049
30949	48020	10.03.2014 01:00	928,5	928,57	928,65	0,0700073	928,5750122

Die falschen Werte sind z.B. hier zufinden:

1819076	48020	1107,51	25.03.2014 20:00
8911848	48020	1564,65	04.06.2014 19:00
8913143	48020	1564,72	04.06.2014 19:15
8964939	48020	1568,83	05.06.2014 06:30

Kann mir jemand sagen was hier falsch ist?

Schöne Grüße
Thomas

Mal so aus dem Bauch heraus: lag() und Konsorten sind reichlich sinnfrei ohne ORDER-Angabe.

Hallo,

ich habe jetzt mal ein Order by hinzugefügt, scheint erst mal gut aus zu sehen.

Schöne Grüße
Thomas