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