Почему ваш второй запрос не работает ...
select Item_No,
Quantity
from Rec_details
group by Item_No,
Quantity
having Quantity=max(Quantity);
Вы группируя обоими Item_No
и Quantity
и Item_No
, как представляется, первичный ключ и содержит уникальные значения, чтобы каждая группа будет содержать только одну строку , Предложение HAVING
выглядит внутри группы, поэтому оно будет проверять, что значение quantity
является максимальным значением внутри этой группы, но в группе есть только одно значение, так что это всегда будет true.Ваш запрос эквивалентен:
SELECT DISTINCT
Item_No,
Quantity
FROM Rec_details;
Некоторые другие способы, чтобы получить максимальное значение:
SQL Fiddle
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;
запроса 1 - Получить один ряд с максимальным quantity
и последним item_no
(используя 1 сканирование таблицы):
SELECT MAX(item_no) KEEP (DENSE_RANK LAST ORDER BY Quantity) AS Item_no,
MAX(Quantity) AS Quantity
FROM Rec_Details
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Запрос 2 - Получить одну строку с максимальным quantity
и последней item_no
(используя 1 сканирование таблицы):
SELECT *
FROM (
SELECT *
FROM Rec_details
ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Запрос 3 - Получить все строки с максимальной quantity
(используя 1 сканирование таблицы):
SELECT Item_no, Quantity
FROM (
SELECT r.*,
RANK() OVER (ORDER BY Quantity DESC) AS rnk
FROM Rec_details r
)
WHERE rnk = 1
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Запрос 4 - Получить Л.Л. строки с максимальным (сканирование с использованием 2 таблицы) quantity
:
SELECT Item_no,
Quantity
FROM Rec_Details
WHERE Quantity = (SELECT MAX(Quantity) FROM Rec_Details)
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Что [Тег: РСУБД] вы используете? – Mureinik
ORACLE SQL Developer –
'WHERE ROWNUM = 1;' – Jonathan