SQL MAX de la colonne, y compris sa key primaire

Court:

De ci-dessous sql select Je reçois le cart_id et la valeur de l'élément de valeur maximale dans ce panier.

SELECT CartItems.cart_id, MAX(ItemValues.value) FROM CartItems INNER JOIN ItemValues ON CartItems.item_id=ItemValues.item_id GROUP BY CartItems.cart_id 

mais j'ai aussi besoin d'item_id pour cet item (ItemValues.item-id).

Longue:

Deux tables, CartItems, ItemValues ​​(et leurs chariots respectifs, articles, hors de propos ici).
Chaque panier peut contenir plusieurs éléments dans lesquels chaque élément a une valeur définie dans ItemValues.
Chaque article appartient à un panier.
La valeur d'un panier est la valeur de l'article avec la valeur maximale dans son panier.
Comment puis-je sélectionner cart-id, max (item-value) et son identifiant-item?

Par exemple, cart-id A contient l'identifiant d'article X avec la valeur 10 et l'identifiant d'article Y avec la valeur 90.
Avec ci-dessus sql select je reçois,

  A, 90 

Ce dont j'ai besoin c'est

 A, Y, 90

plate-forme: MS SQL

En MS SQL et Oracle :

 SELECT * FROM ( SELECT ci.*, iv.*, ROW_NUMBER() OVER (PARTITION BY CartItems.cart_id ORDER BY ItemValues.value DESC) FROM CartItems ci INNER JOIN ItemValues iv ON CartItems.item_id=ItemValues.item_id ) s WHERE rn = 1 

En MySQL :

 SELECT FROM ( SELECT ci.*, ( SELECT id FROM ItemValues iv WHERE iv.item_id = ci.item_id ORDER BY value DESC LIMIT 1 ) AS maxitem FROM CartItems ci ) iv, ItemValues ivo WHERE ivo.id = iv.maxitem 

Ce code a été écrit pour Oracle, mais devrait être compatible avec la plupart des versions SQL:

Cela obtient le maximum (high_val) et returnne sa key.

 select high_val, my_key from (select high_val, my_key from mytable where something = 'avalue' order by high_val desc) where rownum <= 1 

Ce que cela dit est: Trier mytable par high_val en descendant pour les valeurs où quelque chose = 'avalue'. N'attrapez que la ligne du haut, qui vous donnera le maximum (high_val) dans la plage sélectionnée et le my_key à cette table.