Por que sua segunda consulta não funciona...
select Item_No,
Quantity
from Rec_details
group by Item_No,
Quantity
having Quantity=max(Quantity);
Você está agrupando por
Item_No
e Quantity
e o Item_No
parece ser a chave primária e conter valores exclusivos, portanto, cada grupo conterá apenas uma linha. O HAVING
cláusula procura dentro do grupo para verificar se o valor de quantity
é o valor máximo dentro desse grupo, mas há apenas um valor dentro do grupo, então isso sempre será verdade. Sua consulta é o equivalente a:SELECT DISTINCT
Item_No,
Quantity
FROM Rec_details;
Algumas outras maneiras de obter o valor máximo:
SQL Fiddle
Configuração do esquema Oracle 11g R2 :
create table Rec_details (item_no, Quantity ) AS
SELECT 12507,1 FROM DUAL UNION ALL
SELECT 12549,4 FROM DUAL UNION ALL
SELECT 12100,8 FROM DUAL UNION ALL
SELECT 12501,2 FROM DUAL UNION ALL
SELECT 12201,7 FROM DUAL UNION ALL
SELECT 12509,3 FROM DUAL UNION ALL
SELECT 12080,1 FROM DUAL;
Consulta 1 - Obtenha uma linha com
quantity
máxima e mais recente item_no
(usando 1 varredura de tabela) :SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
MAX( Quantity ) AS Quantity
FROM Rec_Details
Resultados :
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Consulta 2 - Obtenha uma linha com
quantity
máxima e mais recente item_no
(usando 1 varredura de tabela) :SELECT *
FROM (
SELECT *
FROM Rec_details
ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1
Resultados :
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Consulta 3 - Obtenha todas as linhas com
quantity
máxima (usando 1 varredura de tabela) :SELECT Item_no, Quantity
FROM (
SELECT r.*,
RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
FROM Rec_details r
)
WHERE rnk = 1
Resultados :
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Consulta 4 - Obtenha todas as linhas com
quantity
máxima (usando 2 varreduras de tabela) :SELECT Item_no,
Quantity
FROM Rec_Details
WHERE Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )
Resultados :
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |