2016-04-06 3 views
2

Ich habe eine Tabelle, die mehrere Daten im gleichen Zeitintervall für jede Minute enthält. Ich möchte Daten von jeder 5. Minute in den letzten 10 Minuten aggregieren. Ich habe versucht, die ganze Lösung auf Stack-Overflow, aber es liefert keine genauen Daten für mich, da keiner von ihnen versucht hat, Daten für ein bestimmtes Zeitintervall zu erhalten.Wie kann ich aggregierte Daten von jeder 5. Minute in den letzten 10 Minuten in Mysql bekommen?

Ich bin mit dieser Abfrage:

SELECT ROUND(unix_timestamp(footable.createdTime)/(60 * 5)) AS timekey, avg(mainData) as aggData 
FROM footable 
WHERE footable.createdTime > date_sub(now(), INTERVAL 10 MINUTE) 
GROUP BY timekey 

Es sollte jedes Mal maximal 2 Datensätze zurück, aber die meiste Zeit der Rückkehr es 3 Datensätze.

Hinweis: - Tabelle enthält Daten für jede Minute bestätigt und dies ist Testbedingung für 10 Minuten könnte es eine Daten der letzten Stunde sein. Es ist keine doppelte Frage, lesen Sie die Beschreibung sorgfältig.

Jede Hilfe wird geschätzt .. !!

Antwort

3

Habe ich es mir heraus und unten ist die Abfrage um das Problem zu lösen:

SET @timeStmp := UNIX_TIMESTAMP(date_sub(now(), INTERVAL 10 MINUTES)); 
SELECT @timeStmp := IF(((unix_timestamp(footable.createdTime) - @timeStmp) >= 295), unix_timestamp(footable.createdTime),@timeStmp) as timekey, avg(mainData) as aggData 
FROM footable 
WHERE footable.createdTime > date_sub(now(), INTERVAL 10 MINUTE) 
GROUP BY timekey 

Diese Abfrage genaue Minute zu Minute Intervall aggregiert Daten bei jeder Ausführung geben wird. Genießen..!!

Verwandte Themen