Hallo zusammen,
ich möchte ein Update auf eine Tabelle durchführen, das mir ein Merkmal J / N setzen.
Die Tabelle schaut so aus:
timestamp: datetime [Primärschlüssel] (z.B. 2006-07-07 18:12:12)
temperatur: float(9,1)
merkmal: char(1)
Also .. ich möchte nun ein Update durchführen, das bei jeder Temperatur prüft, ob die Temperatur 10 Zeilen höher in der Tabelle um MEHR als 1 Grad kälter bzw. wärmer ist.
DANN soll in dem Merkmalfeld ein J (TRUE) abgetragen werden.
Habe im Moment das hier:
Denke mal, das müsste im Groben passen.
Problem habe ich nun beim Vergleich des WHERE `timestamp` < '2006-07-04 08:12:25' ... das ist ja noch statisch. Wie kann ich denn im Sub-Select den timestamp der aktuellen Zeile eintragen lassen? So dass das Statement durch die ganze Tabelle läuft.
EDIT: Bekomme folgenden SQL Fehler: #1093 - You can't specify target table 'temperaturtabelle' for update in FROM clause
Kann wohl nicht diegleiche Table nicht im Vergleich verwenden .. Geht das also nicht als SQL-Statement sondern ich muss die Logik in ein externes (PHP) Skript packen?
Danke für Eure Hilfe, Deo
ich möchte ein Update auf eine Tabelle durchführen, das mir ein Merkmal J / N setzen.
Die Tabelle schaut so aus:
timestamp: datetime [Primärschlüssel] (z.B. 2006-07-07 18:12:12)
temperatur: float(9,1)
merkmal: char(1)
Also .. ich möchte nun ein Update durchführen, das bei jeder Temperatur prüft, ob die Temperatur 10 Zeilen höher in der Tabelle um MEHR als 1 Grad kälter bzw. wärmer ist.
DANN soll in dem Merkmalfeld ein J (TRUE) abgetragen werden.
Habe im Moment das hier:
Code:
UPDATE `temperaturtabelle`
SET `merkmal` = 'J'
WHERE (`temperatur` - (SELECT `temperatur` FROM `temperaturtabelle` WHERE `timestamp` < '2006-07-04 08:12:25' ORDER BY `timestamp` DESC LIMIT 9 , 1) < 1 )
AND ((SELECT `temperatur` FROM `temperaturtabelle` WHERE `timestamp` > '2006-07-04 08:12:25' ORDER BY `timestamp` DESC LIMIT 9 , 1) - `temperatur`< 1 )
Denke mal, das müsste im Groben passen.
Problem habe ich nun beim Vergleich des WHERE `timestamp` < '2006-07-04 08:12:25' ... das ist ja noch statisch. Wie kann ich denn im Sub-Select den timestamp der aktuellen Zeile eintragen lassen? So dass das Statement durch die ganze Tabelle läuft.
EDIT: Bekomme folgenden SQL Fehler: #1093 - You can't specify target table 'temperaturtabelle' for update in FROM clause
Kann wohl nicht diegleiche Table nicht im Vergleich verwenden .. Geht das also nicht als SQL-Statement sondern ich muss die Logik in ein externes (PHP) Skript packen?
Danke für Eure Hilfe, Deo
Zuletzt bearbeitet: