ORACLE: выберите значение de MAX в столбце 2 после выбранного значения de MAX в столбце 1 - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица T в ORACLE со значениями:

cod1 cod2  A   B
==================
A    AA    2   0
A    AB    2   2
B    BB    1   2
A    AA    3   0
A    AA    3   1
B    BB    2   1    

Я хочу вернуть записи (cod1 cod2) с MAX (B) из MAX (A). Например:

A    AA    3   1
A    AB    2   2
B    BB    2   1

Возможно ли это?

select cod1, cod2, MAX(B) 
from T
group by cod1, cod2
where (cod1, cod2, A) IN (
   select cod1, cod2, MAX(A) 
   from T
   group by cod1, cod2
);

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Мы можем попробовать использовать ROW_NUMBER здесь с двухуровневой сортировкой:

WITH cte AS (
    SELECT cod1, cod2, A, B,
        ROW_NUMBER() OVER (PARTITION BY cod1, cod2 ORDER BY A DESC, B DESC) rn
    FROM yourTable
)

SELECT cod1, cod2, A, B
FROM cte
WHERE rn = 1;

enter image description here

Демо

0 голосов
/ 28 января 2019

(продолжение разрешения исходного вопроса)

А если я хочу вернуть таблицу с другим столбцом "MAXs" с "1" или "0"?

пример:

cod1 cod2  A   B   MAXs
=======================
 A    AA   2   0    0
 A    AB   2   2    1
 B    BB   1   2    0
 A    AA   3   0    0
 A    AA   3   1    1
 B    BB   2   1    1
0 голосов
/ 24 января 2019

Почему бы просто не выполнить простое агрегирование:

select cod1, cod2, max(a), max(b)
from t
group by cod1, cod2;

Если вам нужны полные записи, вы можете использовать коррелированный подзапрос:

select t.*
from t 
where t.b = (select t1.b
             from t t1 
             where t1.cod1 = t.cod1 and t1.cod2 = t.cod2
             order by t1.a desc, t1.b desc
             fetch first 1 rows only
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...