2017-11-20 1 views
1

Ich habe eine meteorologische Datenbank und ich möchte Datum und Uhrzeit abrufen, wenn ein maximaler Wert der Temperatur während des Tages erreicht ist.MySQL - Wählen Sie Datum und Uhrzeit für einen maximalen Wert

Ich kann den maximalen Wert der Temperatur erhalten, aber das Datum und die Uhrzeit sind für den ersten Eintrag für dieses Datum.

Um deutlicher:

DATE(DateTime)|DateTime   |TempOutCur 
    2017-11-19|2017-11-19 00:01:19|6.7 
    2017-11-19|2017-11-19 00:06:22|6.7 
    2017-11-19|2017-11-19 00:11:25|6.7 
    2017-11-19|2017-11-19 00:16:28|6.7 
    ................ 
    2017-11-19|2017-11-19 10:50:32|10.3 (this is max of the day) 
    ................ 

Die Abfrage

SELECT DATE(DateTime), DateTime, MAX(TempOutCur) 
FROM meteo_database GROUP BY DATE(DateTime) 

kehrt zurück:

DATE(DateTime)|DateTime   |MAX(TempOutCur) 
    2017-11-19|2017-11-19 00:01:19|10.3 

Wie Sie Datum und Uhrzeit zurückgegeben werden, sind nicht richtig sehen können.

Vielen Dank!

+0

Danke für den Statusbericht zu spezifizieren ist. Gab es eine * Frage *? Der Wert von "DateTime", der von dieser Abfrage zurückgegeben wird, ist unbestimmt; Es ist ein Wert aus einer der Zeilen in der minimierten "Gruppe", aber es könnte eine beliebige Zeile in dieser Gruppe sein. Eine MySQL-spezifische Erweiterung ermöglicht die Ausführung der Abfrage (es sei denn, ONLY_FULL_GROUP_BY ist in sql_mode enthalten). Andere Datenbanken würden einen Fehler aufgrund der Nicht-Aggregat ("DateTime") in der SELECT-Liste, aber nicht in der GROUP BY werfen. Das Resultset scheint der MySQL-Spezifikation zu entsprechen, wie hier dokumentiert: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – spencer7593

Antwort

0

Sie könnten einen mit einer Unterabfrage mit dem max Temp beitreten verwenden

select DATE(m.DateTime), m.DateTime , m.TempOutCur 
from meteo_database m 
INNER JOIN (
    SELECT DATE(DateTime) my_date, MAX(TempOutCur) max_temp 
    FROM meteo_database 
    GROUP BY DATE(DateTime) 
) T on T.my_date = DATE(m.DateTime) AND T.max_temp = m.TempOutCur 
+0

@Liviu Sie sind willkommen .. – scaisEdge

0

Eine Lösung das Aggregat in der WHERE-Klausel

SELECT DATE(DateTime), DateTime, TempOutCur 
FROM meteo_database 
WHERE TempOutCur = (SELECT MAX(TempOutCur) FROM meteo_database) 
Verwandte Themen