Jag har en tabell som innehåller en massa temperaturmätningar för olika analysprojekt.
Kolumnnamn: Sensor (INT) Värde: 4250 (Alltså 42.5 C)
Ett analysprojekt kan innehålla mer än 15.000st temperatur-registreringar. Därför blir det lite tungt att loopa ut varenda rad när man ska skapa t.ex ett jQuery-diagram. Det jag gjort hittills är att t.ex loopa ut var 10:e rad, men jag gillar inte riktigt tanken på att eventuell viktig data missas då.
Så det jag undrar är:
Kan jag göra en SQL-fråga som bara väljer ut temperaturskillnader som är inom rimliga förändringar? Typ att "Välj bara värden som t.ex är -+0.5 C (alltså 0050) från raden innan... Har svårt att förklara bättre.
Förutsatt att det inte finns några gap i id-koiumnen så borde något sådant funka. Dvs, joina in nästa rad, och ta bara med resultatet om skillnaden mellan en rad och nästa rad är större än 50.
SELECT t1.*, t2.* FROM templog t1
JOIN templog t2 ON t2.id = t1.id + 1
WHERE ABS(t1.temp - t2.temp) > 50
ORDER BY t1.id
Sedan skulle jag eventuellt vilja göra andra sökningar, där du även kollar ökningen över lite längre tid. Denna fråga missar ju en konstant ökning när temperaturen ökar precis 0.5 grader mellan varje mätpunkt.
Angående att man skulle missa om det är 0.5 C ökning mellan varje mätpunkt... Skulle ju fungera att i så fall bara sänka till t.ex 0.25 C, eller hur? Fast iofs får man med fler resultat då vilket segar ner, men å andra sidan blir det ju mer korrekt.
Ser inte hur man skulle kunna göra en bredare sökning... Där tar min hjärna slut.
EDIT: Fast nu kom jag ju på att detta blir helt fel. Om temperaturen varit relativt konstant under flera timmar så kommer ju denna funktionen bara visa typ första värdet... och hoppa över resten eftersom dom är inom godkänt intervall typ.
Det jag vill är ju att rensa bort "likadana" mätningar men samtidigt behålla några av dom så man får med alla klockslagen.... hm... Har du nån idé?
Det kanske går att summera/gruppera värdena över en vissa tid. t.ex så man får ut min-, max- och medelvärden var 10:e minut? Skulle något i den stilen fungera?
Nu har jag faktiskt kommit fram till detta som summerar och räknar ut snitt-temperaturen varje timma.
Hur skulle man kunna justera denna frågan för att få fram snittet från varje halvtimma istället? :)
SELECT Projektnamn,
DATE_FORMAT(Skapad, '%Y-%m-%d %H:%i:%s') AS s,
(SUM(Temperatur)/count(Temperatur)) AS t,
FROM tblTemperaturer
WHERE Projektnamn = '$myProject'
GROUP BY Projekt, DATE_FORMAT(Skapad, '%Y-%m-%d %H')
select projektnamn
, date_format(skapad, '%Y-%m-%d %H:%i:%s') as s
, avg(temperatur) as t
from tbltemperaturer
where projektnamn = '$myProject'
group
by projekt
, case when minute(skapad) between 0 and 29
then date_format(skapad, '%Y-%m-%d %H:00')
else date_format(skapad, '%Y-%m-%d %H:30')
end
261 ms totalt · 3 externa anrop · v20260731065814-full.c4b5ca48