Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL obtient les derniers enregistrements de date de plusieurs

Vous pouvez utilisez GROUP BY , mais il est important de comprendre comment cela fonctionne.

Lorsque vous utilisez GROUP BY un groupe de lignes est réduit en une seule et ce qui est affiché dans les autres colonnes qui ne sont pas utilisées dans votre GROUP BY clause, est déterminé soit en utilisant des fonctions d'agrégation, soit il s'agit d'une ligne aléatoire de ce groupe. Vous ne pouvez pas être sûr d'obtenir la ligne correspondant à la ligne affichée contenant le MAX() valeur ou quelle que soit la fonction d'agrégation que vous avez utilisée. Cela devient particulièrement évident lorsque vous effectuez une requête telle que :

SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

La "autre_colonne" peut appartenir à la ligne contenant la valeur MIN() ou la valeur MAX() ou même à une autre ligne non affichée du tout. Dans d'autres RDBMS que MySQL, il est en fait interdit de sélectionner des colonnes qui n'utilisent pas de fonction d'agrégation ou qui ne sont pas répertoriées dans le GROUP BY clause, juste pour éviter que les utilisateurs fassent une erreur ou pensent avoir obtenu le bon résultat.

Donc, dans votre cas, vous semblez vouloir également afficher la colonne "valeur". Pour les raisons ci-dessus, la réponse de juergen_d est fausse, car elle ne sélectionne pas la "valeur", et si c'était le cas, vous ne pouvez pas être sûr que c'est la bonne "valeur". La réponse de Filipe Silva est fausse, car elle regroupe par "valeur". Dans votre cas, cela renverra en fait la table entière. La réponse de Romesh est fausse, car en utilisant deux fois le MAX() fonction vous donnera les valeurs maximales, évidemment, mais pas la valeur correspondant à la valeur datetime.

Alors, comment dois-tu faire ? Ici 3 façons sont décrites . Apprenez-les en les appliquant vous-même. Ce n'est pas si difficile :)