Maison >base de données >tutoriel mysql >Comment sélectionner des lignes avec la date/heure maximale pour chaque maison dans MySQL ?

Comment sélectionner des lignes avec la date/heure maximale pour chaque maison dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-25 06:18:09927parcourir

How to Select Rows with the Maximum Datetime for Each Home in MySQL?

Dans MySQL, sélectionnez la ligne avec les valeurs maximales en fonction d'un autre groupe

Instruction de questions

Considérez le tableau des performances du joueur suivant:

L'objectif est de récupérer les lignes de chaque colonne de maison différente et de considérer la valeur maximale de chaque maison. De plus, les résultats doivent inclure d'autres colonnes (joueur, etc.).
<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>

Exemple de données

Les résultats attendus

<code class="language-sql">INSERT INTO TopTen
  (id, home, `datetime`, player, resource)
VALUES
  (1, 10, '2009-04-03', 'john', 399),
  (2, 11, '2009-04-03', 'juliet', 244),
  (5, 12, '2009-04-03', 'borat', 555),
  (3, 10, '2009-03-03', 'john', 300),
  (4, 11, '2009-03-03', 'juliet', 200),
  (6, 12, '2009-03-03', 'borat', 500),
  (7, 13, '2008-12-24', 'borat', 600),
  (8, 13, '2009-01-01', 'borat', 700)
;</code>

Solution

<code>id  home    datetime       player  resource
1   10     2009-04-03     john    399
2   11     2009-04-03     juliet  244
5   12     2009-04-03     borat   555
8   13     2009-01-01     borat   700</code>
La requête suivante fournit les résultats requis:

Cette requête exécute les étapes suivantes:

Il sélectionne toutes les colonnes dans la table de topten (alias TT).
<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>

Il combine TT et sous-femerie (alias Groupttt) avec une connexion interne, et la récupération de la sous-femerie pour récupérer la valeur maximale de chaque valeur de maison différente.

    Les conditions de connexion garantissent la correspondance de la valeur à domicile et à DoteTime dans les deux tables.
  1. Le résultat contient toutes les colonnes de la table Topten.
  2. Remarque: J'ai révisé le format de date afin qu'il réponde au format standard
  3. pour s'assurer que MySQL peut être correctement analysé. Cela ne modifiera pas la logique de la requête, mais assurera uniquement l'exactitude des données.

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