Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzo della funzione Max() per selezionare i valori di gruppo

Classifica i record con ROW_NUMBER, in modo che il valore massimo per uno sku ottenga #1. Quindi mantieni solo quei record al primo posto.

select sku, item, value
from
(
  select 
    mytable.*
    row_number() over (partition by sku order by value desc) as rn
  from mytable
)
where rn = 1;

Per SKU 1503818 otterrai uno di questi due:

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Se ne vuoi uno in particolare (ad esempio quello con il numero di articolo più alto), aggiungi questo criterio alla clausola ORDER BY di Row_Number.

Per quanto riguarda la query che hai provato tu stesso:dovresti invece cercare coppie di valori sku:

select SKU, ITEM, VALUE from import
where (sku,value) in (select sku, max(value) from import group by sku);

In caso di pareggio, come con SKU 1503818, questa query ti porterà comunque entrambi i record.