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

Comment puis-je sélectionner des lignes avec MAX (valeur de colonne), DISTINCT par plusieurs colonnes en SQL

Une méthode typique utilise une sous-requête corrélée :

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.env = t.env);

Peut-être une méthode légèrement meilleure est :

select t.*
from t
where t.id = (select t2.id
              from t t2 
              where t2.env = t.env
              order by t2.date desc, t2.id desc
              limit 1
             );

C'est légèrement mieux car (1) id est probablement une clé primaire, donc la correspondance est plus rapide ; et (2) s'il y a plusieurs lignes à la même date, une seule ligne est renvoyée.