Am 24.03.2013 16:29, schrieb Heiko Baumann:
>
> Nur: in jedem Pausenzyklus gehen die Temperaturen eine ganze Zeit lang
> rauf, im Arbeitszyklus runter. Ich brauch in der Query also nicht JEDE
> Stelle, an der sie absinkt bzw. ansteigt, sondern nur die, an denen ein
> "Vorzeichenwechsel" (von steigend auf fallend -> Beginn Arbeitstakt bzw.
> von fallend auf steigend -> Ende Arbeitstakt) stattfindet.
>
> Wie mach ich das? Bau ich noch eine zweite Variable f�r den "vorletzten"
> Datensatz und sag "Start nur dann, wenn beide > aktuellem Wert sind? �h,
> neee, schmarrn - hab ja nicht nur 2 Werte pro Zyklus, sondern unbekannt
> viele. Ich muss also doch irgendwie den Wechsel erkennen.. hmmm.
>
Ich hatte eine: ich erzeuge zwei Variablen f�r die Werte des Vorg�ngers
(@x1)und Vor-Vorg�ngers (@x2).
Aus diesen beiden errechne ich die "Tendenz" der Vorg�nger des aktuellen
Werts und lege das in @x3 ab (>0 bedeutet steigend, <0 fallend).
Damit hab ich eigentlich alles f�r die korrekte Auswertung.
Sieht dann so aus:
//letzter Wert
select @x1:=value from data where channel_id=3 order by id limit 1;
// vorletzter Wert
select @x2:=value from data where channel_id=3 order by id limit 1,1;
// Tendenz aus letztem und vorletztem Wert (sinkend = -1, steigend = 1)
select @x3:=if(@x2>@x1,-1, 1) ;
select @t:= 1; // Parameter f�r Messungenauigkeit
Abfrage:
select id, value, @x1,@x2,@x3,
if((value*@t < (@x1) AND @x3 = 1), "start", if((@x1*@t < value AND @x3
=-1), "ende", "")) as zyklus,
@x2:=@x1 as value2,
@x1:=value as value1,
@x3:=if(@x2>=@x1,-1, 1) as tendenz,
from_unixtime(timestamp/1000) as zeit from data where channel_id=3
order by id limit 1000 ;
�berraschenderweise klappt das sogar. Zumindest einigerma�en, da ist
wohl noch etwas Feintuning n�tig, dass die Sonderf�lle (Gleichheit von
Werten, sofortiges "Umschalten"...), aber f�r den Anfang ists ok.
Ich bekomm damit zuverl�ssig ein "start" und "Ende" in die Spalte zyklus.
Dachte das w�r dann damit gel�st, aber jetzt steh ich beim Ausz�hlen auf
dem Schlauch. Wie bekomm ich aus diesen Daten ne vern�nftige Auswertung
(#takt, #anfang, #ende, #dauer), gruppiert nach Stunde/Tag/Monat/Jahr,
und schlie�lich die Gesamtanzahl/-dauer aller Takte?