2010-09-24 6 views
1

J'essaie d'écrire une requête MySQL (de PHP) qui va trouver le score le plus récent (numéro d'identification le plus élevé) pour chaque valeur unique du groupe colonne.Trouver la valeur la plus élevée d'une colonne pour chaque valeur unique dans une autre colonne avec MySQL

J'ai essayé quelques combinaisons différentes de max() et GROUP BY mais je n'arrive pas à le faire fonctionner.

Voici un exemple de ma table:

ID | my_group | score 

1 | red | good 
2 | blue | bad 
3 | red | bad 
4 | blue | good 
5 | red | good 
6 | yellow | bad 
7 | blue | good 
8 | blue | bad 
9 | yellow | good 
10 | blue | bad 

donc ce que je veux retourner dans le tableau ci-dessus serait:

ID | my_group | score 

10 | blue | bad 
9 | yellow | good 
5 | red | good 

Répondre

1
select m.ID, m.my_group, m.score 
from (
    select my_group, max(ID) as MaxID 
    from MyTable 
    group by my_group 
) mm 
inner join MyTable m on mm.my_group = m.my_group 
    and mm.MaxID = m.ID 
+0

Est-ce que Sombody peut l'essayer? Je n'ai pas encore accès à sql. SELECT m.ID, m.my_group, m.score DE MyTable m REJOIGNEZ MyTable mm ON m.my_group = mm.my_group OERE m.id> = mm.id – iddqd

+0

Je viens de l'essayer. Cela fonctionne parfaitement. Merci – Mark

+0

Je veux dire que j'ai essayé la réponse @RedFilter. Ça a marché. – Mark

0

Ne peut pas dire cela est garanti pour travailler, mais cette technique simple a travaillé dans les tests limités que j'ai fait. Fondamentalement, je suis juste inverse-trier la table par ID, puis en sélectionnant et en groupant.

SELECT ID, my_group, score 
FROM (
    SELECT * FROM my_table ORDER BY ID DESC 
) AS table 
GROUP BY my_group 
Questions connexes