Duplicata possible:
Récupération du dernier enregistrement de chaque groupe
J'ai une table, qui a trois champs et données.
Nom, haut, total Chat, 1, 10 Chien, 2, 7 Chat, 3, 20 Cheval, 4, 4 chat, 5, 10 chien, 6, 9
Je veux sélectionner l'enregistrement qui a la valeur la plus élevée de Total
pour chaque Name
, donc mon résultat devrait être comme ceci:
Nom, Haut, Total Chat, 3, 20 Cheval, 4, 4 Chien, 6, 9
J'ai essayé de grouper par nom par ordre de total, mais cela donne le meilleur record de groupe par résultat. Quelqu'un peut-il me guider, s'il vous plaît?
select
Name, Top, Total
from
sometable
where
Total = (select max(Total) from sometable i where i.Name = sometable.Name)
ou
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
Vous pouvez essayer quelque chose comme
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
Ou en utilisant une clause Exists, qui retourne la seule ligne qui existe dans les deux tables
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
)