MySQL: WÄHLEN Sie die höchste Spalte Wert, wenn, WO findet ähnliche Einträge

Meine Frage ist vergleichbar mit diese eine, aber nicht ganz das gleiche.

Ich habe eine Datenbank mit einer riesigen Menge von Büchern, mit den unterschiedlichen Editionen von einigen der gleichen Buchtitel. Ich bin auf der Suche nach einer SQL-Anweisung, die mir die höchste Auflage der einzelnen Titel, die ich auswähle, mit einer WHERE-Klausel (auf der Suche nach bestimmten Buch-Reihe). Hier ist, was die Tabelle sieht wie folgt aus:

|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|
|-- | ------------------------- | ------- | ----|

Dem Ergebnis das ich Suche, ist dies:

|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|
|-- | ------------------------- | ------- | ----|

Der nächste, den ich bekam, war mit dieser Aussage:

select id, title, max(edition), max(year) from books where title like "serie one%" group by title;

aber es gibt die höchste Auflage und Jahr und beinhaltet die erste id, die es findet:

|-- | ----------------------- | ------- | ----|
|01|Serie One Title One    |3      |2009|
|04|Serie One Title Two    |1      |2001|
|05|Serie One Title Three  |4      |2011|
|-- | ----------------------- | ------- | ----|

Dieser schicke sich auch nur nahe kommt, aber nicht das richtige Ergebnis:

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;

Nutzung dieser ich bin immer einzigartige Titel, aber meist alten Ausgaben.

wählen Sie b.id, b.title, b.edition b.Jahr von Bücher b where b.Ausgabe = (select max(b2.edition) von Büchern b2, wenn b2.title = b.Titel)
+1 @wxyz: Warum bringen Sie nicht das als Antwort?
Genial! Genau das, was ich Suche.

InformationsquelleAutor Ack | 2012-11-27

Schreibe einen Kommentar