Maison > base de données > tutoriel mysql > Comment sélectionner les lignes avec le Max DateTime pour chaque maison dans MySQL?

Comment sélectionner les lignes avec le Max DateTime pour chaque maison dans MySQL?

Linda Hamilton
Libérer: 2025-01-25 06:38:09
original
285 Les gens l'ont consulté

How to SELECT Rows with the MAX Datetime for Each Home in MySQL?

MySQL: Sélection des lignes avec la DateTime maximale pour chaque groupe

Ce guide montre comment récupérer efficacement les lignes contenant la valeur maximale de DateTime pour chaque groupe distinct dans une table MySQL. Il s'agit d'un défi SQL commun, impliquant souvent des sous-requêtes ou des fonctions de fenêtre.

Scénario:

Imaginez une table (TopTen) Tracking Player Resource Utilisation à différentes maisons:

<code class="language-sql">CREATE TABLE TopTen (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  home INT UNSIGNED NOT NULL,
  datetime DATETIME NOT NULL,
  player VARCHAR(6) NOT NULL,
  resource INT NOT NULL
);</code>
Copier après la connexion

L'objectif est de trouver, pour chaque home, le record avec la plus récente entrée (datetime), y compris les informations player et resource de ce dernier enregistrement.

approches inefficaces (et pourquoi elles échouent):

Simple GROUP BY et MAX() ne fonctionnera pas directement, car GROUP BY regroupe les données, perdant les colonnes non agrégées comme player. Les tentatives d'utilisation des sous-requêtes pour trouver le DateTime maximum pour chaque maison, puis de rejoindre le tableau d'origine conduisent souvent à des résultats incorrects ou incomplets.

La solution efficace:

La solution la plus efficace exploite une auto-jointure avec une sous-requête:

<code class="language-sql">SELECT tt.*
FROM TopTen tt
INNER JOIN (
    SELECT home, MAX(datetime) AS MaxDateTime
    FROM TopTen
    GROUP BY home
) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime;</code>
Copier après la connexion

Cette requête fonctionne par:

  1. Sous-requête (groupedtt): Cette requête intérieure trouve le maximum datetime pour chaque home, regroupant les résultats par home.
  2. Join: La requête extérieure rejoint la table d'origine (TopTen aliasée comme tt) avec les résultats de la sous-requête. La condition JOIN garantit que seules les lignes correspondant à la fois le home et le maximum datetime sont inclus dans le résultat final.

Cette méthode garantit que toutes les colonnes de la table d'origine (y compris player et resource) sont renvoyées pour la ligne représentant le maximum datetime pour chaque home. Cela évite la perte de données et fournit les informations complètes requises.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal