La sélection de max() de plusieurs colonnes

Ok, voici ma table:

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

Maintenant, je veux sélectionner la dernière version d'un produit, de sorte que la version avec le plus haut update_id & patch_id.

Par exemple, la dernière version de

  • produit 1 doit retourner 1, 2, 1
  • produit de 2 et de 3, 0, 1
  • produit 3 doit retourner 1, 0, 1

J'ai essayé toutes sortes de choses avec GROUP BY et HAVING, essayé des sous-requêtes, mais je n'ai pas encore trouver un moyen pour accomplir cette tâche.

Quelqu'un peut-il m'aider à trouver la bonne requête, ou devrais-je penser à écrire une fonction php pour cela?

Modifier

Quelques informations supplémentaires:
- Les colonnes sont la clé primaire (il y a plus de colonnes, mais pour ce problème, ils n'ont pas d'importance)
- Aucun des colonnes est en auto-increment

C'est la table:

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

Marqué comme en double, il n'est pas: L'autre question pour les enregistrements supérieur à une valeur pour l'une des trois colonnes différentes.

Dans cette question, nous recherchons pour le plus grand numéro de version regroupés par le product_id.

Modifier 3

rgz réponse me dit encore que c'est un doublon. Tout d'abord: cette question est plus. Deuxièmement, je ne pense pas que la réponse est la même.

rgz suggère d'utiliser la requête suivante:

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

PLUS grand(1,2,3) renvoie 3, à droite? Wat si nous avons ces valeurs:

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

Que je comprends, cette requête sera de retour:

  product_id  latest_version
  1                 1
  1                 8
  1                 3

Mais il doit retourner:

  product_id  version_id update_id  patch_id
  1           3          0          0

Je ne pense pas que le PLUS susceptible de l'aider. Si vous pensez qu'il va, merci de me prouver le contraire.

  • Je sais que c'est une vieille question, mais vous pouvez aussi faire ceci: SELECT * from db.patch COMMANDE PAR UPDATE_ID DESC, PATCH_ID DESC LIMIT 1;
  • Double Possible de Mysql valeur max à partir de 3 colonnes
  • Ce n'est pas un doublon. Voir mon edit.
  • Pour clarifier, est la condition pour que le retour lignes doivent être de la plus haute patch_id de la plus haute update_id de la plus haute version_id de chaque product_id?
  • Oui, c'est la condition.
InformationsquelleAutor Scuba Kay | 2011-12-14