Maison > base de données > tutoriel mysql > Comment sélectionner des lignes distinctes regroupées par valeur minimale dans une table de base de données ?

Comment sélectionner des lignes distinctes regroupées par valeur minimale dans une table de base de données ?

Susan Sarandon
Libérer: 2025-01-17 20:12:10
original
197 Les gens l'ont consulté

How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

Sélectionnez des lignes uniques regroupées par valeur minimale

Dans le domaine des opérations de bases de données, nous sommes souvent confrontés à la tâche de regrouper les données selon la valeur minimale d'un champ spécifique tout en sélectionnant des lignes uniques. Disons que vous disposez d'un tableau avec plusieurs lignes pour chaque identifiant unique, par exemple :

<code>| key_id | id | record_date | other_cols |
|---|---|---|---|
| 1 | 18 | 2011-04-03 | x |
| 2 | 18 | 2012-05-19 | y |
| 3 | 18 | 2012-08-09 | z |
| 4 | 19 | 2009-06-01 | a |
| 5 | 19 | 2011-04-03 | b |
| 6 | 19 | 2011-10-25 | c |
| 7 | 19 | 2012-08-09 | d |</code>
Copier après la connexion

L'objectif est de récupérer une ligne de chaque identifiant unique, représentant la ligne avec la plus petite record_date.

Une approche courante consiste à utiliser une sous-requête pour identifier la date d'enregistrement minimale pour chaque identifiant, puis à la joindre à la table d'origine :

<code>SELECT *
FROM t
WHERE record_date = (SELECT MIN(record_date) FROM t WHERE id = t.id)</code>
Copier après la connexion

Cependant, cette méthode ne peut pas gérer les entrées record_date minimales en double avec le même identifiant, ce qui entraînera des résultats sur plusieurs lignes.

Pour résoudre ce problème, nous avons besoin d'une solution qui garantit des lignes uniques. Une de ces approches consiste à utiliser une jointure interne et une table dérivée qui calcule la date d'enregistrement minimale pour chaque identifiant :

<code>SELECT mt.*     
FROM MyTable mt INNER JOIN
    (
        SELECT id, MIN(record_date) AS MinDate
        FROM MyTable
        GROUP BY id
    ) t ON mt.id = t.id AND mt.record_date = t.MinDate</code>
Copier après la connexion

La jointure interne garantit que seules les lignes avec la date d'enregistrement minimale pour chaque identifiant sont sélectionnées, produisant ainsi un tableau de lignes uniques regroupées par valeur minimale.

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!

source:php.cn
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