Zählen von Hochpunkten

freehawk

Benutzer
Beiträge
6
Hallo zusammen,

ich habe in einer Datenbank Werte meiner Heizung gesammelt. Nur würde ich gerne bestimmen wie oft die Heizung angelaufen ist. Dazu kann ich eigentlich nur meine Abgastemperatur auswerten.

Nun hat wenn ich daraus eine Kurve zeichen lasse, diese Kurve ja immer einen Hochpunkt wenn die Heinzung läuft.

Kann ich diese Hochpunkte irgendwie mit MySQL gezielt abfragen?

Ansonsten müsste ich das mit Logik im nachhinein machen.

Danke

Gruß
Markus
 
Werbung:
Also ich habe eine eindeutige ID, einen Zeitstempel (Unixtimestamp) und die Temperaturwerte jeweils in einer Spalte.

Diese Werte werden jede halbe Stunde abgefragt und in die Tabelle geschrieben.
 
Müßte man sich halt anschauen, wie oft die Heizung angeht (und ob eine halbe Stunde Meßintervall genau genug ist), wie sich das darstellt in den Werten etc. Du kannst vergleichen, ob der Wert höher oder niedricher als der letzte Wert ist (ach nee, Du hast MySQL, das hat keine lag() - Funktion, evtl. mal googeln, was es da als Alternative gibt).
 
Dann ist ja super und der Lösung steht nicht mehr viel im Wege...

Code:
test=# create table freehawk(id serial primary key, ts timestamp, wert numeric);
CREATE TABLE
test=*# insert into freehawk (ts, wert) select '2017-01-10 00:00:00'::timestamp + s * '39minutes'::interval, random() * 80 from generate_series(0, 100) s;
INSERT 0 101

 id  |  ts  |  wert  |  brenner   
-----+---------------------+--------------------+------------
  1 | 2017-01-10 00:00:00 |  34.2648424953222 |
  2 | 2017-01-10 00:39:00 |  69.5760302245617 | Brenner an
  3 | 2017-01-10 01:18:00 |  67.4595558270812 |
  4 | 2017-01-10 01:57:00 |  49.569960013032 |
  5 | 2017-01-10 02:36:00 |  32.6921404525638 |
  6 | 2017-01-10 03:15:00 |  26.603631824255 |
  7 | 2017-01-10 03:54:00 |  53.2370558381081 | Brenner an
  8 | 2017-01-10 04:33:00 |  48.2108074426651 |
  9 | 2017-01-10 05:12:00 |  59.557350538671 | Brenner an
  10 | 2017-01-10 05:51:00 |  36.7447316274047 |
  11 | 2017-01-10 06:30:00 |  40.4502646997571 | Brenner an
  12 | 2017-01-10 07:09:00 |  60.4872752353549 | Brenner an
  13 | 2017-01-10 07:48:00 |  68.6767479032278 | Brenner an
  14 | 2017-01-10 08:27:00 |  17.4443533271551 |
  15 | 2017-01-10 09:06:00 |  60.2763060107827 | Brenner an
  16 | 2017-01-10 09:45:00 |  17.7019734680653 |
  17 | 2017-01-10 10:24:00 |  33.6292626708746 | Brenner an
  18 | 2017-01-10 11:03:00 |  22.9248889163136 |
  19 | 2017-01-10 11:42:00 |  78.419106900692 | Brenner an
  20 | 2017-01-10 12:21:00 |  22.3269063979387 |
  21 | 2017-01-10 13:00:00 |  21.4162293821573 |
  22 | 2017-01-10 13:39:00 |  21.8617947772145 | Brenner an
  23 | 2017-01-10 14:18:00 |  52.1507905423641 | Brenner an
  24 | 2017-01-10 14:57:00 |  47.1629501134157 |
  25 | 2017-01-10 15:36:00 |  60.1466645672917 | Brenner an
  26 | 2017-01-10 16:15:00 |  74.1438134387136 | Brenner an
  27 | 2017-01-10 16:54:00 |  4.27337534725666 |
  28 | 2017-01-10 17:33:00 |  39.9410453438759 | Brenner an
  29 | 2017-01-10 18:12:00 |  70.2574043348432 | Brenner an
  30 | 2017-01-10 18:51:00 |  49.0641271322966 |
  31 | 2017-01-10 19:30:00 |  60.9026057273149 | Brenner an
  32 | 2017-01-10 20:09:00 |  24.5222468301654 |
  33 | 2017-01-10 20:48:00 |  38.6401573568583 | Brenner an
  34 | 2017-01-10 21:27:00 |  48.3621615543962 | Brenner an
  35 | 2017-01-10 22:06:00 |  74.0922068431973 | Brenner an
  36 | 2017-01-10 22:45:00 |  71.332297809422 |
  37 | 2017-01-10 23:24:00 |  74.965793415904 | Brenner an
  38 | 2017-01-11 00:03:00 |  47.3292626813054 |
  39 | 2017-01-11 00:42:00 |  39.5431052520871 |
  40 | 2017-01-11 01:21:00 |  54.5231439545751 | Brenner an
  41 | 2017-01-11 02:00:00 |  4.0739943087101 |
  42 | 2017-01-11 02:39:00 |  79.9933699890971 | Brenner an
  43 | 2017-01-11 03:18:00 |  35.01041918993 |
  44 | 2017-01-11 03:57:00 |  72.7507422491908 | Brenner an
  45 | 2017-01-11 04:36:00 |  17.4377233162522 |
  46 | 2017-01-11 05:15:00 |  15.2867252379656 |
  47 | 2017-01-11 05:54:00 |  10.4527157172561 |
  48 | 2017-01-11 06:33:00 |  51.0669859871268 | Brenner an
  49 | 2017-01-11 07:12:00 |  38.2116141542792 |
  50 | 2017-01-11 07:51:00 |  8.87182261794806 |
  51 | 2017-01-11 08:30:00 |  73.3938924223185 | Brenner an
  52 | 2017-01-11 09:09:00 |  59.6278435364366 |
  53 | 2017-01-11 09:48:00 |  30.7336173951626 |
  54 | 2017-01-11 10:27:00 |  45.5446829646826 | Brenner an
  55 | 2017-01-11 11:06:00 |  26.7907936498523 |
  56 | 2017-01-11 11:45:00 |  10.8802819624543 |
  57 | 2017-01-11 12:24:00 |  39.6884964033961 | Brenner an
  58 | 2017-01-11 13:03:00 |  31.0641689971089 |
  59 | 2017-01-11 13:42:00 |  50.8213273435831 | Brenner an
  60 | 2017-01-11 14:21:00 |  29.9459007382393 |
  61 | 2017-01-11 15:00:00 |  0.128296166658401 |
  62 | 2017-01-11 15:39:00 |  31.7239330708981 | Brenner an
  63 | 2017-01-11 16:18:00 |  54.4681475684047 | Brenner an
  64 | 2017-01-11 16:57:00 |  38.7684535235167 |
  65 | 2017-01-11 17:36:00 | 0.0860946252942085 |
  66 | 2017-01-11 18:15:00 |  48.560354411602 | Brenner an
  67 | 2017-01-11 18:54:00 |  30.1007513701916 |
  68 | 2017-01-11 19:33:00 |  75.0518880411983 | Brenner an
  69 | 2017-01-11 20:12:00 |  15.8896170929074 |
  70 | 2017-01-11 20:51:00 |  69.6438566222787 | Brenner an
  71 | 2017-01-11 21:30:00 |  49.5750320330262 |
  72 | 2017-01-11 22:09:00 |  19.9636114388704 |
  73 | 2017-01-11 22:48:00 |  69.6372266113758 | Brenner an
  74 | 2017-01-11 23:27:00 |  4.58545122295618 |
  75 | 2017-01-12 00:06:00 |  12.7143536880612 | Brenner an
  76 | 2017-01-12 00:45:00 |  7.07494992762804 |
  77 | 2017-01-12 01:24:00 |  19.8721764609218 | Brenner an
  78 | 2017-01-12 02:03:00 |  23.1670694053173 | Brenner an
  79 | 2017-01-12 02:42:00 |  58.1419359520078 | Brenner an
  80 | 2017-01-12 03:21:00 |  58.083790615201 |
  81 | 2017-01-12 04:00:00 |  32.0388920232654 |
  82 | 2017-01-12 04:39:00 |  51.5358283743262 | Brenner an
  83 | 2017-01-12 05:18:00 |  37.7116341888905 |
  84 | 2017-01-12 05:57:00 |  62.7725094184279 | Brenner an
  85 | 2017-01-12 06:36:00 |  17.0805113390088 |
  86 | 2017-01-12 07:15:00 |  64.5024278387427 | Brenner an
  87 | 2017-01-12 07:54:00 |  73.6527914181352 | Brenner an
  88 | 2017-01-12 08:33:00 |  56.7690077424049 |
  89 | 2017-01-12 09:12:00 |  15.5665968731046 |
  90 | 2017-01-12 09:51:00 |  44.4741187617183 | Brenner an
  91 | 2017-01-12 10:30:00 |  6.71490848064423 |
  92 | 2017-01-12 11:09:00 |  15.694893039763 | Brenner an
  93 | 2017-01-12 11:48:00 |  76.1980518326163 | Brenner an
  94 | 2017-01-12 12:27:00 |  61.1830560490489 |
  95 | 2017-01-12 13:06:00 |  54.4633465632796 |
  96 | 2017-01-12 13:45:00 |  76.2841464579105 | Brenner an
  97 | 2017-01-12 14:24:00 |  29.7434104606509 |
  98 | 2017-01-12 15:03:00 |  4.5640979334712 |
  99 | 2017-01-12 15:42:00 |  71.3360345363617 | Brenner an
 100 | 2017-01-12 16:21:00 |  45.6330275535583 |
 101 | 2017-01-12 17:00:00 |  74.2079545930028 | Brenner an
(101 Zeilen)

Du müßtest nur schauen, wie Du lag() in MySQL emulierst.
 
hmm nur zu schauen ob der Wert eines vorher größer ist als der derzeitige wird nicht ganz ausreichend sein, da die Werte ja langsam hochsteigen und dann wieder runterfallen.

Sieht man ja auch an deinen Werten in der Tabelle, da steht zu oft Brenner an.

Das Zugreifen müsste ja theoretisch über einen Join gehen...
 
Ok, dann halt noch abfragen, ob der nächste Wert wieder kleiner ist:

Code:
select *,case when wert > lag(wert) over (order by ts) and lead(wert) over (order by ts) < wert then 'Brenner an' else '' end as brenner from freehawk;
id  |  ts  |  wert  |  brenner   
-----+---------------------+--------------------+------------
  1 | 2017-01-10 00:00:00 |  34.2648424953222 |
  2 | 2017-01-10 00:39:00 |  69.5760302245617 | Brenner an
  3 | 2017-01-10 01:18:00 |  67.4595558270812 |
  4 | 2017-01-10 01:57:00 |  49.569960013032 |
  5 | 2017-01-10 02:36:00 |  32.6921404525638 |
  6 | 2017-01-10 03:15:00 |  26.603631824255 |
  7 | 2017-01-10 03:54:00 |  53.2370558381081 | Brenner an
  8 | 2017-01-10 04:33:00 |  48.2108074426651 |
  9 | 2017-01-10 05:12:00 |  59.557350538671 | Brenner an
  10 | 2017-01-10 05:51:00 |  36.7447316274047 |
  11 | 2017-01-10 06:30:00 |  40.4502646997571 |
  12 | 2017-01-10 07:09:00 |  60.4872752353549 |
  13 | 2017-01-10 07:48:00 |  68.6767479032278 | Brenner an
  14 | 2017-01-10 08:27:00 |  17.4443533271551 |
  15 | 2017-01-10 09:06:00 |  60.2763060107827 | Brenner an
  16 | 2017-01-10 09:45:00 |  17.7019734680653 |
  17 | 2017-01-10 10:24:00 |  33.6292626708746 | Brenner an
  18 | 2017-01-10 11:03:00 |  22.9248889163136 |
  19 | 2017-01-10 11:42:00 |  78.419106900692 | Brenner an
  20 | 2017-01-10 12:21:00 |  22.3269063979387 |
  21 | 2017-01-10 13:00:00 |  21.4162293821573 |
  22 | 2017-01-10 13:39:00 |  21.8617947772145 |
  23 | 2017-01-10 14:18:00 |  52.1507905423641 | Brenner an
  24 | 2017-01-10 14:57:00 |  47.1629501134157 |
  25 | 2017-01-10 15:36:00 |  60.1466645672917 |
  26 | 2017-01-10 16:15:00 |  74.1438134387136 | Brenner an
  27 | 2017-01-10 16:54:00 |  4.27337534725666 |
  28 | 2017-01-10 17:33:00 |  39.9410453438759 |
  29 | 2017-01-10 18:12:00 |  70.2574043348432 | Brenner an
  30 | 2017-01-10 18:51:00 |  49.0641271322966 |
  31 | 2017-01-10 19:30:00 |  60.9026057273149 | Brenner an
  32 | 2017-01-10 20:09:00 |  24.5222468301654 |
  33 | 2017-01-10 20:48:00 |  38.6401573568583 |
  34 | 2017-01-10 21:27:00 |  48.3621615543962 |
  35 | 2017-01-10 22:06:00 |  74.0922068431973 | Brenner an
  36 | 2017-01-10 22:45:00 |  71.332297809422 |
  37 | 2017-01-10 23:24:00 |  74.965793415904 | Brenner an
  38 | 2017-01-11 00:03:00 |  47.3292626813054 |
  39 | 2017-01-11 00:42:00 |  39.5431052520871 |
  40 | 2017-01-11 01:21:00 |  54.5231439545751 | Brenner an
  41 | 2017-01-11 02:00:00 |  4.0739943087101 |
  42 | 2017-01-11 02:39:00 |  79.9933699890971 | Brenner an
  43 | 2017-01-11 03:18:00 |  35.01041918993 |
  44 | 2017-01-11 03:57:00 |  72.7507422491908 | Brenner an
  45 | 2017-01-11 04:36:00 |  17.4377233162522 |
  46 | 2017-01-11 05:15:00 |  15.2867252379656 |
  47 | 2017-01-11 05:54:00 |  10.4527157172561 |
  48 | 2017-01-11 06:33:00 |  51.0669859871268 | Brenner an
  49 | 2017-01-11 07:12:00 |  38.2116141542792 |
  50 | 2017-01-11 07:51:00 |  8.87182261794806 |

Ich habe sicherlich auch keine sonderlich sinnvollen Werte, weil ja via random() gewonnen. In Real dürfte das ja anders aussehen, oder?
 
hmm je länger ich gerade über meine Daten nachdenke werde ich es wohl in logik außerhalb lösen. Grund hierfür ist es dass die Werte ja auch schwanken. Ich bekomme gerade leider keinen Output meiner Daten.

Also wenn der Brenner nicht läuft schwankt die Temperatur um einen gewissen Punkt. Da können alle möglichen Kombinationen von Werten auftauchen. Genauso wenn der Brenner läuft schwankt die Temperatur ebenso, da die Abgastemperatur auf einen gewissen Wert geregelt wird und deshalb schwankt.

Dann kann ich sagen ich schaue mir die Daten an und wenn ein gewisser Wert überstiegen wird warte ich wieder bis ein gewisser Wert unterschritten wird. Das zähle ich dann als Brenner läuft...

Denke das ist denke ich einfacher als hier eine sehr komplizierte Abfrage zu machen.
 
Man könnte auch einen gleitenden Mittelwert berechnen, aber auch dazu benötigt man Window-Funktionen - die MySQL nicht bietet. Man ist halt immer wieder auf der Verliererseite mit MySQL ...
 
Werbung:
Ist schon richtig das hier viele Funktionen die zur Lösung führen würden fehlen. Eine Zeilennummer könnte man auch verwenden um lag() zu emulieren.

Wie wäre es denn mit soetwas wie:
Code:
SELECT   t.ID,
     t.zeit,
     t.wert,
     (   CASE
       WHEN   t.wert < 40
       THEN   'aus'
       WHEN   t.wert > 60
       THEN   'an'
       WHEN   t.wert BETWEEN 40 AND 60
       AND   (   SELECT   avg(wert)
           FROM   tabelle
           WHERE   zeit > t.zeit
           ORDER BY zeit DESC
           LIMIT 5 ) > 50
       THEN   'an'
       ELSE   'aus'
       END ) AS [status]
FROM   tabelle t
ORDER BY zeit DESC
In diesem Fall nehme ich an das die Heitzung bei über 50 Grad an ist. Wenn die Temperatur zwischen 40 und 60 Grad liegt (Schwankungsbereich) wird geprüft, ob die 5 nachfolgenden Datensätze im Durchschnitt über 50 liegen, dann wird die Heitzung als aktiv betrachtet. Das läßt sich natürlich Feinjustieren.

Der Subselect zieht etwas Performance.
 
Zurück
Oben