Requête mysql avec group by et order by
Question
J'ai un tableau comme celui-ci:
.--------------------------------.
| Name | XX | Date |
.--------------------------------.
| N1 | 5 | 2009-05-01 |
| N1 | 10 | 2008-01-08 |
| N2 | 8 | 2009-02-02 |
.________________________________.
Mon résultat devrait être le suivant:
.------------.
| Name | XX |
.------------.
| N1 | 5 |
| N2 | 8 |
.____________.
Je veux juste les lignes, regroupées par nom mais seulement les plus récentes. Je ne veux pas que la ligne avec XX = 10 dans cet exemple, car la date: 2009-05-01 > 2008-01-08.
Je ne sais pas comment trier par date et le grouper: (
La solution
Pour quoi voulez-vous que le regroupement?
select Name, XX
from yourTable t1
where Date = (select MAX(Date)
from yourTable t2
where t1.Name = t2.Name)
Si vous devez ajouter XX pour le dernier jour, alors:
select Name, SUM(XX)
from yourTable t1
where Date = (select MAX(Date)
from yourTable t2
where t1.Name = t2.Name)
group by Name
Autres conseils
SELECT Name, XX FROM myTable GROUP BY Name ORDER BY Date DESC
Vous devrez peut-être mettre des guillemets autour de votre champ de date
`Date`
Désolé mais ces 2 sont tous les deux faux.
Vous devriez
SELECT Name, XX FROM t1 JOIN (SELECT Name, max(date) FROM t1 GROUP BY Name) subquery ON t1.Name = subquery.Name AND t1.Date = subquery.Date
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow