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.

sélectionnez b.id.b.le titre, la b.édition b.année de livres b où b.édition = (select max(b2.édition de livres b2 où b2.titre = b.title)
+1 @wxyz: Pourquoi ne pas ajouter que comme une réponse?
Génial! Exactement ce que je cherche.

OriginalL'auteur Ack | 2012-11-27