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 souhaite connaître 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
Cherchez-vous la date maximum pour chaque modèle?
SELECT model, max(date) FROM doc
GROUP BY model
Si vous recherchez tous les modèles correspondant à la date maximale de la table entière ...
SELECT model, date FROM doc
WHERE date IN (SELECT max(date) FROM doc)
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);
Sous-requête donnant des dates. Nous ne lions pas avec le modèle. Donc, la requête ci-dessous résout le problème.
S'il y a des dates en double/modèle 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
essaye ça:
SELECT model, date
FROM doc
WHERE date = (SELECT MAX(date)
FROM doc GROUP BY model LIMIT 0, 1)
GROUP BY model
L'utilisation de max (date) n'a pas résolu mon problème, car rien ne garantit que les autres colonnes proviendront de la même ligne que max (date). Au lieu de cela, celui-ci a résolu mon problème et trié le groupe par dans un ordre correct et les valeurs des autres colonnes sont de la même ligne que la date maximale est:
SELECT model, date
FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
GROUP BY model