MySQL: SÉLECTIONNEZ le plus élevé la valeur de la colonne OÙ trouve des entrées similaires
Ma question est comparable à cette une, mais pas tout à fait la même.
J'ai une base de données avec une énorme quantité de livres, avec les différentes éditions de certains de le même les titres de livres. Je suis à la recherche d'une instruction SQL qui me donne le plus haut numéro de l'édition de chacun des titres que je suis la sélection avec une clause where (pour trouver des livres de la série). Voici ce que le tableau ressemble à:
|id|title |edition|year|
|-- | ------------------------- | ------- | ----|
|01|Serie One Title One |1 |2007|
|02|Serie One Title One |2 |2008|
|03|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|05|Serie One Title Three |1 |2008|
|06|Serie One Title Three |2 |2009|
|07|Serie One Title Three |3 |2010|
|08|Serie One Title Three |4 |2011|
|-- | ------------------------- | ------- | ----|
Le résultat que je cherche est: est-ce
|id|title |edition|year|
|-- | ------------------------- | ------- | ----|
|03|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|08|Serie One Title Three |4 |2011|
|-- | ------------------------- | ------- | ----|
Le plus proche que je suis a l'aide de cette instruction:
select id, title, max(edition), max(year) from books where title like "serie one%" group by title;
mais il renvoie le plus élevé de l'édition et de l'année et comprend l'id du premier qu'il trouve:
|-- | ----------------------- | ------- | ----|
|01|Serie One Title One |3 |2009|
|04|Serie One Title Two |1 |2001|
|05|Serie One Title Three |4 |2011|
|-- | ----------------------- | ------- | ----|
Cette fantaisie se joindre à nous est proche, mais ne donne pas le bon résultat:
select b.id, b.title, b.edition, b.year from books b inner join (select name, max(edition) as maxedition from books group by title) g on b.edition = g.maxedition where b.title like "serie one%" group by title;
À l'aide de ce que je suis l'obtention de titres uniques, mais surtout de vieilles éditions.
+1 @wxyz: Pourquoi ne pas ajouter que comme une réponse?
Génial! Exactement ce que je cherche.
OriginalL'auteur Ack | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une sous-requête:
Voir SQL jouer avec la Démo
Ou vous pouvez utiliser un
IN
clause:Voir SQL jouer avec la Démo
OriginalL'auteur Taryn
Ici est un SQLFiddle exemple:
Dans MySql, vous pouvez faire ceci:
OriginalL'auteur valex
La façon la plus simple:
select * from (select id, title, edition, year from books order by title, edition desc) group by title;
OriginalL'auteur Erik Berentaev