Heim > Datenbank > MySQL-Tutorial > Wie wähle ich in einer Datenbanktabelle eindeutige Zeilen aus, die nach dem Mindestwert gruppiert sind?

Wie wähle ich in einer Datenbanktabelle eindeutige Zeilen aus, die nach dem Mindestwert gruppiert sind?

Susan Sarandon
Freigeben: 2025-01-17 20:12:10
Original
245 Leute haben es durchsucht

How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

Eindeutige Zeilen nach Mindestwert gruppiert auswählen

Im Bereich Datenbankoperationen stehen wir häufig vor der Aufgabe, Daten nach dem Mindestwert eines bestimmten Felds zu gruppieren und gleichzeitig eindeutige Zeilen auszuwählen. Nehmen wir an, Sie haben eine Tabelle mit mehreren Zeilen für jeden eindeutigen Bezeichner, zum Beispiel:

<code>| key_id | id | record_date | other_cols |
|---|---|---|---|
| 1 | 18 | 2011-04-03 | x |
| 2 | 18 | 2012-05-19 | y |
| 3 | 18 | 2012-08-09 | z |
| 4 | 19 | 2009-06-01 | a |
| 5 | 19 | 2011-04-03 | b |
| 6 | 19 | 2011-10-25 | c |
| 7 | 19 | 2012-08-09 | d |</code>
Nach dem Login kopieren

Das Ziel besteht darin, von jeder eindeutigen ID eine Zeile abzurufen, die die Zeile mit dem kleinsten Datensatzdatum darstellt.

Ein gängiger Ansatz besteht darin, eine Unterabfrage zu verwenden, um das minimale Aufnahmedatum für jede ID zu ermitteln und es dann wieder mit der Originaltabelle zu verknüpfen:

<code>SELECT *
FROM t
WHERE record_date = (SELECT MIN(record_date) FROM t WHERE id = t.id)</code>
Nach dem Login kopieren

Diese Methode kann jedoch keine doppelten Einträge für das Mindesteintragsdatum mit derselben ID verarbeiten, was zu mehrzeiligen Ergebnissen führt.

Um dieses Problem zu lösen, benötigen wir eine Lösung, die eindeutige Zeilen gewährleistet. Ein solcher Ansatz besteht darin, einen inneren Join und eine abgeleitete Tabelle zu verwenden, die das minimale Aufnahmedatum für jede ID berechnet:

<code>SELECT mt.*     
FROM MyTable mt INNER JOIN
    (
        SELECT id, MIN(record_date) AS MinDate
        FROM MyTable
        GROUP BY id
    ) t ON mt.id = t.id AND mt.record_date = t.MinDate</code>
Nach dem Login kopieren

Der innere Join garantiert, dass nur die Zeilen mit dem minimalen Datensatzdatum für jede ID ausgewählt werden, wodurch effektiv eine Tabelle mit eindeutigen Zeilen erstellt wird, die nach Mindestwerten gruppiert sind.

Das obige ist der detaillierte Inhalt vonWie wähle ich in einer Datenbanktabelle eindeutige Zeilen aus, die nach dem Mindestwert gruppiert sind?. 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