Frage

Kurz:

Von unten sql select bekomme ich die cart_id und den Wert der maximalen bewerteten Artikel in diesem Warenkorb.

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

aber ich brauche auch item_id für das Element (ItemValues.Element-id).

Lange:

Zwei Tische, CartItems, ItemValues (und Ihre jeweiligen Wagen, Elemente, hier irrelevant).
Jeder Wagen kann mehrere Positionen haben während jedes Element hat einen Wert angegeben, der in ItemValues.
Jedes Element gehört zu einem Wagen.
Der Wert eines Wagens den Wert des Elements mit dem maximalen Wert in Ihren Warenkorb.
Wie tun ich wählen Sie Warenkorb-id, max(Element-Wert) und die entsprechenden Element-id?

Zum Beispiel Warenkorb-id enthält Eine Element-id für X mit dem Wert 10 und item-id-Y mit dem Wert 90.
Mit obigem sql auswählen, die ich bekommen,

A, 90
Was ich brauche, ist

A, Y, 90


Plattform:MS SQL

War es hilfreich?

Lösung

In MS SQL und 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

In 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

Andere Tipps

Dieser code wurde geschrieben für Oracle sein, sollte aber kompatibel mit den meisten SQL-Versionen:

Dies wird max(high_val) und gibt seinen Schlüssel.

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

Was dies sagt, ist:Sortieren mytable von high_val absteigender für Werte, wo etwas = 'avalue'.Nur greifen die oberste Zeile, die Sie mit dem max(high_val) in der gewählten Bereich und die my_key der Tabelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top