Die Wahl von max() für mehrere Spalten

Ok, hier ist meine Tabelle:

product_id  version_id  update_id  patch_id
  1           1           0          0
  1           1           1          0
  1           1           1          1
  1           1           2          0
  1           1           2          1
  2           1           0          0
  2           2           0          0
  2           3           0          0
  2           3           0          1
  3           1           0          0
  3           1           0          1

Nun möchte ich wählen Sie die neueste version von einem Produkt, also die version mit der höchsten update_id & patch_id.

Beispielsweise die neueste version von

  • Produkt 1 sollten zurück 1, 2, 1
  • Produkt 2 zurückkehren sollte, 3, 0, 1
  • Produkt 3 zurückkehren sollte, 1, 0, 1

Ich versuchte alle Arten von Sachen, die mit GROUP BY und HAVING, versuchte Unterabfragen, aber ich kann immer noch nicht herausfinden, einen Weg, dies zu erreichen.

Kann mir jemand helfen den richtigen zu finden-Abfrage, oder sollte ich schreiben eine php-Funktion dafür?

Bearbeiten

Einige zusätzliche Infos:
- Die Spalten sind zusammen der Primärschlüssel (es sind mehr Spalten, aber für dieses problem Sie nicht betrifft)
- Keine der Spalten ist auto-increment

Dies ist die Tabelle:

CREATE  TABLE IF NOT EXISTS `db`.`patch` (
`product_id` INT NOT NULL ,
`version_id` INT NOT NULL ,
`update_id` INT NOT NULL ,
`patch_id` INT NOT NULL
PRIMARY KEY (`product_id`, `version_id`, `update_id`, `patch_id`) ,
INDEX `fk_patch_update1` (`product_id` ASC, `version_id` ASC, `update_id` ASC) )

Edit 2

Gekennzeichnet als Duplikate, es ist nicht: Die andere Frage scheint für Datensätze, die höher als ein Wert für jeden der drei verschiedenen Spalten.

In dieser Frage suchen wir nach der höchsten Versionsnummer gruppiert nach product_id.

Edit 3

landesvermessungsamtes Antwort sagt mir wieder, dass dies ein Duplikat ist. Zunächst einmal: diese Frage ist älter. Zweitens, ich glaube nicht, dass die Antwort ist die gleiche.

landesvermessungsamtes schlägt mit der folgenden Abfrage:

SELECT product_id, GREATEST(version_id, update_id, patch_id) AS latest_version FROM patch.

GRÖßTEN(1,2,3) liefert 3, richtig? Wat, wenn wir diese Werte:

  product_id  version_id  update_id  patch_id
  1           1           0          0
  1           1           2          8
  1           3           0          0

So wie ich das verstehe, ist diese Abfrage wil zurück:

  product_id  latest_version
  1                 1
  1                 8
  1                 3

Aber es sollte zurück:

  product_id  version_id update_id  patch_id
  1           3          0          0

Ich glaube nicht, GRÖßTEN helfen könnte. Wenn Sie denken, es wird, bitte beweisen mich nicht falsch.

Ich weiß, es ist eine alte Frage, aber Sie könnte dies auch tun: SELECT * FROM db.patch BESTELLUNG DURCH UPDATE_ID DESC, PATCH_ID DESC LIMIT 1;
Mögliche Duplikate von Mysql-max-Wert aus 3 verschiedenen Spalten
Dies ist kein Duplikat. Siehe mein edit.
Zu klären ist, ist die Bedingung, dass die Rückgabe von Zeilen muss die höchste patch_id der höchsten update_id des höchsten version_id jeder product_id?
Ja, das ist die Bedingung.

InformationsquelleAutor Scuba Kay | 2011-12-14

Schreibe einen Kommentar