Maison >base de données >tutoriel mysql >Comment sélectionner les 3 enregistrements les plus récents avec des valeurs uniques dans une autre colonne ?

Comment sélectionner les 3 enregistrements les plus récents avec des valeurs uniques dans une autre colonne ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 03:47:09163parcourir

How to Select the 3 Most Recent Records with Unique Values in Another Column?

Sélection des enregistrements les plus récents avec des valeurs distinctes : une approche révisée

La question présentée concerne la récupération des trois enregistrements les plus récents à partir d'une table basée sur sur une colonne de temps, avec la condition supplémentaire que ces enregistrements doivent avoir des valeurs distinctes dans une autre colonne, appelée autreidentifiant. Pour y parvenir, une requête SQL à multiples facettes est nécessaire.

Inconvénients de la requête originale

La requête initialement tentée a rencontré des limitations en raison de l'ordre inhérent des opérations dans SQL. Le regroupement s'effectue avant la commande, ce qui entraîne le renvoi de données incorrectes.

La requête révisée

Pour résoudre ce problème, une requête plus sophistiquée est requise :

SELECT *
FROM `table`
WHERE `id` = (
    SELECT `id`
    FROM `table` as `alt`
    WHERE `alt`.`otheridentifier` = `table`.`otheridentifier`
    ORDER BY `time` DESC
    LIMIT 1
)
ORDER BY `time` DESC
LIMIT 3

Explication :

  • La sous-requête récupère le identifiant de l’enregistrement le plus récent pour chaque autre valeur d’identifiant distincte. Cette sous-requête garantit l'unicité.
  • La requête principale sélectionne ensuite les trois premiers enregistrements de la table en fonction de la colonne de temps, en s'assurant qu'ils ont des valeurs otheridentifier uniques.
  • Enfin, ces enregistrements sont classés par leurs valeurs temporelles par ordre décroissant et limitées aux trois plus récentes.

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