SQL: trova il record massimo per gruppo

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 )