Hallo Stefan,
so eine Abfrage zu formulieren ist in SQL eigentlich nicht vorgesehen, da SQL Mengenorientiert ist und Deine Anforderung ist eine serielle Abfrage, denn die Reihenfolge entscheidet ob etwas zutrifft oder nicht.
Zwei Lösungsmöglichkeiten:
a) Eine Stored Procedure mit CURSOR
b) folgende Abfrage mit MySQL User Variablen. Nicht einfach zu verstehen.
CREATE TABLE temperatur (
zeitpunkt DATETIME NOT NULL,
wert DEC(10,2) NOT NULL
);
INSERT INTO temperatur VALUES
( '2012-03-20 10:00:00', 10.0 ),
( '2012-03-20 11:00:00', 11.0 ),
( '2012-03-20 12:00:00', 12.0 ),
( '2012-03-20 12:30:00', -30.0 ), /* Nulldurchlauf */
( '2012-03-20 12:40:00', -40.0 ),
( '2012-03-20 13:00:00', 13.0 ),
( '2012-03-20 13:30:00', -30.0 ), /* Nulldurchlauf */
( '2012-03-20 14:00:00', 14.0 );
/**
* Lösung mit MySQL User Variablen
* um aus einer Mengenorientierung eine serielle Abarbeitung
* zu realisieren
* Fehler: Wenn der "letzte" Datensatz negativ ist, dann wird er nicht angezeigt
*/
SELECT t3.*, t5.*
FROM (SELECT t2.numrow, t2.zeitpunkt, t2.wert
FROM ( SELECT @numrow1 := 1 ) init
JOIN ( SELECT @numrow1 AS numrow, t.zeitpunkt, t.wert, @numrow1 := @numrow1 +1
FROM temperatur t
ORDER BY t.zeitpunkt
) t2
) t3
JOIN (SELECT t4.numrow, t4.zeitpunkt, t4.wert
FROM ( SELECT @numrow2 := 1 ) init
JOIN ( SELECT @numrow2 AS numrow, t.zeitpunkt, t.wert, @numrow2 := @numrow2 +1
FROM temperatur t
ORDER BY t.zeitpunkt
) t4
) t5
ON t3.numrow+1 = t5.numrow
AND t3.wert >= 0
AND t5.wert < 0
ORDER BY t3.zeitpunkt;
+--------+---------------------+-------+--------+---------------------+--------+
| numrow | zeitpunkt | wert | numrow | zeitpunkt | wert |
+--------+---------------------+-------+--------+---------------------+--------+
| 3 | 2012-03-20 12:00:00 | 12.00 | 4 | 2012-03-20 12:30:00 | -30.00 |
| 6 | 2012-03-20 13:00:00 | 13.00 | 7 | 2012-03-20 13:30:00 | -30.00 |
+--------+---------------------+-------+--------+---------------------+--------+
2 rows in set (0.02 sec)
mysql>
EDIT
Abfrageergebnis hat gefehlt...
Grüße
Thomas
Edited 1 time(s). Last edit at 03/23/2012 11:39AM by Thomas Wiedmann.