mysql Zeitstempel auslesen | selber gelöst :)

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
a_pat
Beiträge: 167
Registriert: 11.01.2005 16:54:22
Wohnort: Luzern

mysql Zeitstempel auslesen | selber gelöst :)

Beitrag von a_pat » 01.04.2018 21:30:06

Guten Tag

Ich habe einen Datensatz, bei dem ich einen min Wert ermittle. Zu diesem Wert suche ich den Zeitstempel.

Code: Alles auswählen

mysql> 
SELECT id, zeitstempel, temp_out FROM (
SELECT id, zeitstempel, MIN(temp_out) AS temp_out FROM daten 
WHERE zeitstempel BETWEEN '2018-03-02 00:00:01' AND '2018-03-04 23:59:59' 
GROUP BY DATE_FORMAT(zeitstempel, '%Y-%m-%d')) s;

Code: Alles auswählen

+--------+---------------------+----------+
| id     | zeitstempel         | temp_out |
+--------+---------------------+----------+
| 115547 | 2018-03-02 00:00:02 |     8.59 |
| 115619 | 2018-03-03 00:00:02 |     6.75 |
| 115691 | 2018-03-04 00:00:02 |     8.65 |
+--------+---------------------+----------+
Jedoch brauche ich die Stunden, somit habe ich die noch extrahiert:

Code: Alles auswählen

mysql> SELECT id, zeitstempel, temp_out FROM (
SELECT id, zeitstempel, MIN(temp_out) AS temp_out FROM daten 
WHERE zeitstempel BETWEEN '2018-03-02 00:00:01' AND '2018-03-04 23:59:59' 
GROUP BY DATE_FORMAT(zeitstempel, '%Y-%m-%d %H')) s 
GROUP BY DATE_FORMAT(zeitstempel, '%Y-%m-%d')

Code: Alles auswählen

+--------+---------------------+----------+
| id     | zeitstempel         | temp_out |
+--------+---------------------+----------+
| 115547 | 2018-03-02 00:00:02 |     8.76 |
| 115619 | 2018-03-03 00:00:02 |     8.41 |
| 115691 | 2018-03-04 00:00:02 |     8.81 |
+--------+---------------------+----------+
und so stimmen weder die Zeiten, noch die Temperatur Werte. Hat jemand eine Idee???
Zuletzt geändert von a_pat am 01.04.2018 21:37:21, insgesamt 1-mal geändert.

a_pat
Beiträge: 167
Registriert: 11.01.2005 16:54:22
Wohnort: Luzern

Re: mysql Zeitstempel auslesen

Beitrag von a_pat » 01.04.2018 21:36:01

Gelöst :)
Typisch! Soeben habe ich es gepostet und schon habe ich des Rätsels Lösung gefunden :)

Code: Alles auswählen

mysql>
SELECT id, zeitstempel, temp_out FROM (
SELECT id, zeitstempel, MIN(temp_out) AS temp_out FROM daten WHERE zeitstempel 
BETWEEN '2018-03-02 00:00:01' AND '2018-03-04 23:59:59' 
GROUP BY temp_out) s 
GROUP BY DATE_FORMAT(zeitstempel, '%Y-%m-%d');

Code: Alles auswählen

+--------+---------------------+----------+
| id     | zeitstempel         | temp_out |
+--------+---------------------+----------+
| 115567 | 2018-03-02 06:40:01 |     8.59 |
| 115638 | 2018-03-03 06:20:02 |     6.75 |
| 115711 | 2018-03-04 06:40:02 |     8.65 |
+--------+---------------------+----------+

a_pat
Beiträge: 167
Registriert: 11.01.2005 16:54:22
Wohnort: Luzern

Re: mysql Zeitstempel auslesen | selber gelöst :)

Beitrag von a_pat » 03.04.2018 15:31:05

Mysql funktioniert nicht ganz so, wie ich es mir vorgestellt habe und somit ist die oben genannte MIN(temp_out) Variabel obsolet. Ich hab dies herausgefunden, als ich aus dem MIN ein MAX gemacht habe... es kommen die selben Werte!
Folglich ist etwas anderes verantwortlich, dass die richtigen MIN(temp_out) Werte herausgelesen werden und zwar die Reihenfolge des GROUP BY!

Maximal Werte können so ausgelesen werden:

Code: Alles auswählen

SELECT id, zeitstempel, temp_out FROM ( 
SELECT id, zeitstempel, temp_out FROM daten 
WHERE zeitstempel  BETWEEN '2018-01-02 00:00:01' AND '2018-02-02 23:59:59'  
GROUP BY temp_out DESC) s  
GROUP BY DATE_FORMAT(zeitstempel, '%Y-%m-%d');
und die MIN Werte folglich mit

Code: Alles auswählen

GROUP BY temp_out ASC) s  
bzw. ohne ASC wird es standardmässig so formatiert.

Antworten