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
Freigeben: 2025-01-12 13:57:46
Original
984 Leute haben es durchsucht

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

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

Und die tatsächlichen Daten enthalten:

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

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

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!

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