2016-07-29 6 views

Antwort

2
UPDATE State 
INNER JOIN 
(
    select id, FLOOR(AVG(duration)) as avg 
    from Actions 
    WHERE type = 'started' 
    group by id   
) tmp ON tmp.id = State.id 
SET duration = tmp.avg 
+0

Das ist fast die Antwort. Können Sie die innere Abfrage so aktualisieren, dass 'WHERE type - 'started' und die äußere Abfrage' WHERE State.id = tmp.id' ist? Ich werde es die Antwort mit diesen Änderungen markieren –

+0

Ich habe es geändert. Die äußere Abfrage benötigt keine 'where'-Klausel, da der JOIN bereits die Daten in der' ON'-Klausel filtert, wenn Sie einen 'INNER JOIN' anstelle eines' LEFT JOIN' verwenden. –

+0

Die äußere Abfrage benötigt es. Wenn ich ohne das lief, erhalte ich einen Fehler, der versucht, einen Nullwert zu setzen. Aber mit dem äußeren wo, alles funktioniert einwandfrei –

0

Kurze Antwort ist:

UPDATE Staat LEFT JOIN Aktionen ON Actions.id = State.id SET Dauer = FLOOR (AVG (Dauer)) WHERE Actions.id IN (ID aus Aktionen auswählen, wo Actions.id = state.id und type = 'started' GROUP BY Actions.id)

Wahrscheinlich nicht ganz syntaktisch korrekt.

+0

Dies ist nicht korrekt. Es werden alle zusammen gemittelt. –

Verwandte Themen