Tages Min/Max/ Durchschnitts Wert

Drake

Benutzer
Beiträge
7
Hallo zusammen,

ich betreibe eine kleine Wetterstation die Temperatur und Luftfeuchte Protokolliert.
Die Daten werden in eine Tabelle "temperatur" geschrieben.
Der Zeitstempel wird in das Feld "ts" geschrieben und die aktuelle Temperatur in das Feld "wert".
Das schreiben der Daten erfolgt alle 5min.

Ich würde jetzt gerne drei Abfragen erstellen die mir drei werte liefern:
1. Maximale Tages Temperatur
2. Minimale Tages Temperatur
3. Durchschnittliche Tages Temperatur

Ich habe es mit dem Befehl "SELECT ts as time, wert as Temperatur from temperatur order by ts asc" hinbekommen den aktuellen Wert auszulesen :-) aber leider scheitern an den drei anderen Abfragen meine
Kenntnisse :-/

Anbei mal eine Übersicht über meine Tabelle:

+---------+-----------+------+-----+---------------------------+--------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------+------+-----+---------------------------+--------------------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| wert | float | YES | | NULL | |
| ts | timestamp | NO| | current_timestamp() | on update current_timestamp() |
+---------+-----------+------+-----+---------------------------+--------------------------------------+

Vielen Dank schon mal für eure Hilfe!

Gruß
 
Werbung:
Aktuell sieht meine Abfrage so aus:

SELECT ts as time, MAX(wert) as Temperatur from temperatur
WHERE ts >= DATE_SUB(CURDATE(), INTERVAL 1 DAY);

So wie es für mich aussieht rechnet er den Tag jedoch nicht von 00:00 bis 24:00.
Aktuell wird mir der Tageshöchstwert von gestern angezeigt :-/
Ich denke es liegt an dem INTERVAL 1DAY.

Wie kann ich ihm sagen er soll mit der Berechnung von 00:00 bis 24:00 Uhr des aktuellen Tages beginnen?

VG
 
Deine Abfrage ist syntaktisch und logisch falsch, MySQL zu doof dies zu erkennen.

Code:
test=# create table drake(ts timestamp, wert int);
CREATE TABLE
test=*# select ts, max(wert) from drake ;
ERROR:  column "drake.ts" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select ts, max(wert) from drake ;

Andreas
 
Ok, ich bin jetzt kein MySQL Spezialist und möchte auch keiner werden. Ich benötige diese Abfragen lediglich für meine kleine Wetterstation zuhause.
Kannst du mir sagen wie die Abfrage richtig lauten könnte?
Vielen Dank
 
Werbung:
Code:
test=*# create table drake(id serial primary key, ts timestamp, wert int);
CREATE TABLE
test=*# insert into drake (ts, wert) select '2020-03-15'::timestamp + t * '6 hours'::interval, random()*100 from generate_series(1,25) t;
INSERT 0 25
test=*# select * from drake;
 id |         ts          | wert
----+---------------------+------
  1 | 2020-03-15 06:00:00 |   85
  2 | 2020-03-15 12:00:00 |   53
  3 | 2020-03-15 18:00:00 |   50
  4 | 2020-03-16 00:00:00 |   46
  5 | 2020-03-16 06:00:00 |   79
  6 | 2020-03-16 12:00:00 |    7
  7 | 2020-03-16 18:00:00 |   72
  8 | 2020-03-17 00:00:00 |   94
  9 | 2020-03-17 06:00:00 |   86
 10 | 2020-03-17 12:00:00 |   26
 11 | 2020-03-17 18:00:00 |   93
 12 | 2020-03-18 00:00:00 |   39
 13 | 2020-03-18 06:00:00 |   40
 14 | 2020-03-18 12:00:00 |   65
 15 | 2020-03-18 18:00:00 |   16
 16 | 2020-03-19 00:00:00 |   72
 17 | 2020-03-19 06:00:00 |   15
 18 | 2020-03-19 12:00:00 |   94
 19 | 2020-03-19 18:00:00 |   29
 20 | 2020-03-20 00:00:00 |   58
 21 | 2020-03-20 06:00:00 |   40
 22 | 2020-03-20 12:00:00 |   95
 23 | 2020-03-20 18:00:00 |   89
 24 | 2020-03-21 00:00:00 |   63
 25 | 2020-03-21 06:00:00 |   88
(25 rows)
est=*# select ts::date, min(wert), max(wert), avg(wert) from drake group by ts::date;
     ts     | min | max |         avg         
------------+-----+-----+---------------------
 2020-03-20 |  40 |  95 | 70.5000000000000000
 2020-03-17 |  26 |  94 | 74.7500000000000000
 2020-03-21 |  63 |  88 | 75.5000000000000000
 2020-03-16 |   7 |  79 | 51.0000000000000000
 2020-03-19 |  15 |  94 | 52.5000000000000000
 2020-03-18 |  16 |  65 | 40.0000000000000000
 2020-03-15 |  50 |  85 | 62.6666666666666667
(7 rows)

Das casten geht in MySQL wohl nicht via ::date, aber es gibt wohl eine Fubktion dafür. Siehe Handbuch.
 
Zurück
Oben