71 votes

Obtenez la dernière date à partir des données MySQL groupées

J'ai les données suivantes dans ma base de données :

 |NO | model | date     | 
+---+-------+----------+
|1  | bee   |2011-12-01|
|2  | bee   |2011-12-05|
|3  | bee   |2011-12-12|
|4  | tar   |2011-12-13|

Je veux obtenir la dernière date de chaque groupe de modèles :

 | model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|

J'ai essayé:

 SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model

18voto

GPRathour Points 3071

Vous pouvez essayer d'utiliser max() dans la sous-requête, quelque chose comme ceci :

 SELECT model, date  
FROM doc 
WHERE date in (SELECT MAX(date) from doc GROUP BY model);

14voto

Sous-requête donnant des dates. Nous ne faisons pas de lien avec le modèle. Donc, la requête ci-dessous résout le problème.

S'il y a des dates/modèles en double, cela peut être évité par la requête suivante.

 select t.model, t.date
from doc t
inner join (select model, max(date) as MaxDate from doc  group by model)
tm on t.model = tm.model and t.date = tm.MaxDate

1voto

essaye ça:

 SELECT model, date
FROM doc
WHERE date = (SELECT MAX(date)
FROM doc GROUP BY model LIMIT 0, 1)
GROUP BY model

0voto

Iman Sedighi Points 100

L'utilisation de max(date) n'a pas résolu mon problème car rien ne garantit que les autres colonnes seront de la même ligne que la max(date). Au lieu de cela, celui-ci a résolu mon problème et a trié le groupe dans un ordre correct et les valeurs des autres colonnes proviennent de la même ligne que la date maximale :

 SELECT model, date 
FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
GROUP BY model

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X