Heim > Datenbank > MySQL-Tutorial > Wie sortiere ich Datensätze vor dem Gruppieren in MySQL nach Datum und Uhrzeit?

Wie sortiere ich Datensätze vor dem Gruppieren in MySQL nach Datum und Uhrzeit?

Patricia Arquette
Freigeben: 2024-10-30 06:24:28
Original
664 Leute haben es durchsucht

How to Sort Records by Date and Time Before Grouping in MySQL?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage