Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von MySQLs GROUP BY und ORDER BY die aktuellsten E-Mails von jedem Absender abrufen?

Wie kann ich mithilfe von MySQLs GROUP BY und ORDER BY die aktuellsten E-Mails von jedem Absender abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-12 13:57:46986Durchsuche

How to Retrieve the Most Recent Email from Each Sender Using MySQL's GROUP BY and ORDER BY?

Detaillierte Erläuterung und Anwendung der MySQL-Klauseln GROUP BY und ORDER BY

Beim Arbeiten mit Datentabellen in einer MySQL-Datenbank ist es wichtig, das Zusammenspiel der GROUP BY- und ORDER BY-Klauseln zu verstehen. Stellen Sie sich das folgende Szenario vor:

Sie müssen die Zeilen in der E-Mail-Tabelle nach der E-Mail-Adresse des Absenders gruppieren, mit dem Ziel, von jedem Absender die neueste E-Mail abzurufen. Allerdings die folgende Abfrage:

<code class="language-sql">SELECT 
    `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails` 
GROUP BY LOWER(`fromEmail`) 
ORDER BY `timestamp` DESC</code>

führt zu falschen Ergebnissen. Es gruppiert E-Mails nach Absender, zeigt jedoch möglicherweise nicht die neuesten Themen in jeder Gruppe an. Die Ergebnisse können Folgendes anzeigen:

<code>fromEmail: [email protected], subject: hello
fromEmail: [email protected], subject: welcome</code>

Und die tatsächlichen Daten enthalten:

<code>fromEmail: [email protected], subject: hello
fromEmail: [email protected], subject: programming question
fromEmail: [email protected], subject: welcome</code>

Lösung: Verwenden Sie eine Unterabfrage und die Funktion ANY_VALUE()

Um dieses Problem zu lösen, können Sie eine Unterabfrage in Kombination mit der Funktion ANY_VALUE() verwenden:

<code class="language-sql">SELECT * 
FROM ( 
    SELECT `timestamp`, `fromEmail`, ANY_VALUE(`subject`) AS `subject`
    FROM `incomingEmails` 
    ORDER BY `timestamp` DESC
) AS tmp_table 
GROUP BY LOWER(`fromEmail`)</code>

In MySQL 5.7 und höher ermöglicht ANY_VALUE() die Verwendung nicht aggregierter Spalten in einer GROUP BY-Anweisung mit einer SELECT-Klausel. Es wählt zufällig einen Wert aus jeder Gruppe aus und stellt so sicher, dass die Unterabfrage den neuesten Betreff für die E-Mail-Adresse jedes Absenders abruft.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von MySQLs GROUP BY und ORDER BY die aktuellsten E-Mails von jedem Absender abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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