2017-12-27 5 views
0

Ich habe Probleme mit dem Erstellen von MySQL-Trigger mit - ich will Spalte aus den letzten 144 Datensätze temp der letzten Zeile der Tabelle von avg_temp mit durchschnittlich aktualisieren den Spalte in stats Tabelle. Ich mache das über phpmyadmin, bevor INSERT passiert.
Mein Code, hoffe, es hilft zu erklären, was ich den Code tun möchte:MySQL-Trigger - Update letzte Zeile aus der Tabelle mit durchschnittlich aus einer anderen Tabelle genommen

UPDATE avg_temp(`temp`) 
SET (
    SELECT `id`, AVG(`temperature_C`) 
    FROM `stats` 
    GROUP by `id` 
    LIMIT 144 
) 
ORDER BY id DESC 
LIMIT 1 

dies wirft jedoch einen Syntaxfehler.

Wenn mir jemand dann helfen könnte, wäre das wunderbar.

+0

Sie sollten die Spalte einstellen. Probieren Sie 'Update avg_temp Set temp (...' Ich würde auch die 'id' Spalte im inneren Select entfernen. Still 'Group By id'. –

Antwort

0

Dies sollte die richtige Syntax für MySQL-Update sein, den Durchschnitt der letzten 144 Werte zu berechnen, eine sublquery mit:

UPDATE avg_temp SET `temp` = AVG(
    (
    SELECT `temperature_C` 
    ORDER BY id DESC 
    LIMIT 144 
) 
) 
ORDER BY id DESC 
LIMIT 1 
0

yyou könnte etwas subselect und für das Recht avg Ergebnis sollten Sie eine subselect verwenden verwenden erhalten für 144 Zeilen

update avg_temp 
set temp = (select avg(t1.temperature_C) 
     from (
     SELECT id, temperature_C 
     FROM stats 
     ORDER BY id 
     LIMIT 144 
    ) t1 
) 
    where id = your_id 
0

Sie erscheinen wollen:

UPDATE avg_temp 
    SET `temp` = (SELECT AVG(temperature_C) 
        FROM (SELECT s.temperature_C 
         FROM stats s 
         ORDER BY id DESC 
         LIMIT 144 
         ) s 
       ) 
ORDER BY id DESC 
LIMIT 1; 

Allerdings wäre ich sehr misstrauisch gegenüber Ihrem Wunsch, dies zu tun, besonders bei einem Auslöser. Normalerweise hängt die Auswirkung eines Triggers von den Daten in den an den Trigger übergebenen Datensätzen ab. Ich kann mir keine Situation vorstellen, in der ich jemals einen Auslöser (außer zu Test- oder Informationszwecken) geschrieben habe, der diese Daten nicht referenziert.

Sie scheinen die insert als Timing-Mechanismus zu verwenden. Stattdessen möchten Sie möglicherweise nur eine Ansicht erstellen, die den Durchschnittswert aus den letzten 144 Zeilen (oder aus den letzten 144 Zeilen außer einem) zurückgibt.

Verwandte Themen