Sortieren Sie Datensätze vor dem Gruppieren in MySQL nach Datum und Uhrzeit
Wenn Sie mit einer Tabelle arbeiten, die Zeitstempel enthält, ist es wichtig, Informationen basierend darauf abzurufen bestimmte Zeitrahmen. Allerdings kann das Sortieren nach Datum und Uhrzeit vor dem Gruppieren von Datensätzen nach einem bestimmten Feld in MySQL eine Herausforderung darstellen.
Beachten Sie die folgende Tabelle:
name date time tom | 2011-07-04 | 01:09:52 tom | 2011-07-04 | 01:09:52 mad | 2011-07-04 | 02:10:53 mad | 2009-06-03 | 00:01:01
Um die ältesten Datensätze nach Namen gruppiert abzurufen, Die folgende Abfrage würde fehlschlagen:
SELECT * ORDER BY date ASC, time ASC GROUP BY name
Diese Abfrage funktioniert nicht, da GROUP BY vor ORDER BY stehen muss. Das Gruppieren vor dem Sortieren führt jedoch dazu, dass der neuere „verrückte“ Datensatz zuerst zurückgegeben wird und nicht der ältere.
Um dieses Problem zu lösen, stehen mehrere Ansätze zur Verfügung:
Unterabfrageansatz :
SELECT * FROM ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) AS sub GROUP BY name
Diese Methode erstellt eine Unterabfrage, die die Datensätze nach Datum und Uhrzeit sortiert und die Ergebnisse dann zur Gruppierung nach Namen an die äußere Abfrage übergibt. Da GROUP BY den ersten übereinstimmenden Datensatz in der Unterabfrage bearbeitet, wird für jeden Namen der älteste Datensatz abgerufen.
ROW_NUMBER() Ansatz:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY date, time) AS row_num FROM table_name ) AS sub WHERE row_num = 1
ROW_NUMBER( ) weist jeder Zeile innerhalb jeder Namenspartition eine fortlaufende Nummer zu, sortiert nach Datum und Uhrzeit. Indem nur die Datensätze mit row_num = 1 ausgewählt werden, wird der älteste Datensatz für jeden Namen ausgewählt.
MAX()-Unterabfrageansatz:
SELECT * FROM table_name WHERE (date, time) IN ( SELECT MAX(date) AS date, MAX(time) AS time FROM table_name GROUP BY name )
Diese Abfrage verwendet a Unterabfrage, um das maximale Datum und die maximale Uhrzeit für jeden Namen auszuwählen. Durch Filtern der Hauptabfrage basierend auf diesen Werten wird der älteste Datensatz für jeden Namen abgerufen.
Das obige ist der detaillierte Inhalt vonWie sortiere ich Datensätze vor dem Gruppieren in MySQL nach Datum und Uhrzeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!