У меня есть структура таблицы, как:Найти максимальное значение в колонке для каждого раздела
CREATE TABLE new_test
(col1 NUMBER(2) NOT NULL,
col2 VARCHAR2(50) NOT NULL,
col3 VARCHAR2(50) NOT NULL,
col4 VARCHAR2(50) NOT NULL
);
Он имеет данные:
col1 col2 col3 col4
0 A B X
1 A B Y
2 A B Z
1 C D L
3 C D M
Мне нужно найти значение COL4 которое имеет максимальное значение для комбинации col2 и col3. например мой результат должен быть:
col4
Z
M
Я пытался использовать оракула аналитическую функцию:
SELECT col4, MAX(col1) OVER (PARTITION BY col2, col3) FROM (
SELECT col2, col3, col4, col1
FROM new_test);
Но он не работает, как ожидалось. Не могли бы вы помочь мне решить эту проблему?
Update: Я мог бы сделать его работу с помощью:
SELECT a.col4
FROM new_test a,
(SELECT col2,
col3,
col4,
MAX(col1) OVER (PARTITION BY col2, col3) AS col1
FROM new_test
) b
WHERE a.col2 = b.col2
AND a.col3 = b.col3
AND a.col4 = b.col4
AND a.col1 = b.col1;
Есть ли лучший способ, чем это?
Уважаемый Сильвен, благодарю вас. Ваш запрос довольно легко прочитать по сравнению с моим. Но я заметил, что перфоманс обоих запросов одинаковый. Есть ли лучший/эффективный способ? – user613114
@ user613114 О характеристиках: мой первый, хотя и будет добавлять составной индекс на 'col2, col3, col4'. Но, не зная точно вашу структуру таблицы («ключи») и план выполнения, трудно сказать больше. Не стесняйтесь задавать другой вопрос! –
Спасибо Сильвен за вашу помощь. Я сделаю это. – user613114