2016-12-30 4 views
0

Ich speichere Daten in MySQL-Datenbank alle 5 Sekunden und ich möchte diese Daten in durchschnittlich 5 Minuten gruppieren. dieseeinzelne Abfrage zu gruppieren Daten

Die select ist:

SELECT MIN(revision) as revrev, 
    AVG(temperature), 
    AVG(humidity) 
    FROM dht22_sens t 
    Group by revision div 500 
    ORDER BY `revrev` DESC 

ist möglich, Daten mit einer einzigen Abfrage möglicherweise in der gleichen Tabelle zu retten?

+0

Check out 'insert ... select ...' Anweisung – Shadow

+0

was meinst du? – MadCat

Antwort

1

Wenn es darum geht, die Anzahl der Zeilen zu reduzieren, dann denke ich, dass Sie eine neue Zeile mit aggregierten Werten einfügen und dann die ursprünglichen, detaillierten Zeilen löschen müssen. Ich kenne keine einzige SQL-Anweisung zum Einfügen und Löschen in einer Eile (siehe auch eine ähnliche Antwort from symcbean at StackOverflow, die zusätzlich vorschlägt, diese beiden Anweisungen in eine Prozedur zu packen).

Ich würde vorschlagen, eine zusätzliche Spalte aggregationLevel und tun zwei Anweisungen (mit oder ohne Verfahren) hinzuzufügen:

insert into dht22_sens SELECT MIN(t.revision) as revision, 
    AVG(t.temperature) as temperature, 
    AVG(t.humidity) as humidity, 
    500 as aggregationLevel 
    FROM dht22_sens t 
    WHERE t.aggregationLevel IS NULL; 

delete from dht22_sens where aggregationLevel is null; 
+0

Dies ist perfekt, ich füge Aggregatiolevel Colum und ich füge wo Revision> NOW() - Intervall 1 Tag, um nur die "alten" Daten zu aggregieren. – MadCat

Verwandte Themen