Possibile duplicato:
Recupero dell’ultimo record in ciascun gruppo
Ho una tabella, che ha tre campi e dati.
Nome, Top, Total cat, 1, 10 dog, 2, 7 cat, 3, 20 horse, 4, 4 cat, 5, 10 dog, 6, 9
Voglio selezionare il record che ha il valore più alto di Total
per ogni Name
, quindi il mio risultato dovrebbe essere come questo:
Nome, in alto, totale gatto, 3, 20 cavallo, 4, 4 Cane, 6, 9
Ho provato a raggruppare per nome in ordine di totale, ma dà il massimo record di gruppo per risultato. Qualcuno può guidarmi, per favore?
select Name, Top, Total from sometable where Total = (select max(Total) from sometable i where i.Name = sometable.Name)
o
select Name, Top, Total from sometable inner join ( select max(Total) Total, Name from sometable group by Name ) as max on max.Name = sometable.Name and max.Total = sometable.Total
Puoi provare qualcosa del genere
SELECT s.* FROM sometable s INNER JOIN ( SELECT Name, MAX(Total) MTotal FROM sometable GROUP BY Name ) sMax ON s.Name = sMax.Name AND s.Total = sMax.MTotal
O utilizzando una clausola Exists, che restituisce l’unica riga esistente in entrambe le tabelle
SELECT * from sometable T where exists (select 1 from (SELECT nombre, max(total) as total FROM sometable TT GROUP by nombre) TT where T.name=TT.name and T.total=TT.total )