Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich Zeilen mit MAX (Spaltenwert), DISTINCT durch MEHRERE Spalten in SQL AUSWÄHLEN?

Eine typische Methode verwendet eine korrelierte Unterabfrage:

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

Vielleicht ist eine etwas bessere Methode:

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
             );

Dies ist etwas besser, weil (1) id ist wahrscheinlich ein Primärschlüssel, daher ist die Übereinstimmung schneller; und (2) wenn mehrere Zeilen am selben Datum vorhanden sind, wird nur eine Zeile zurückgegeben.