Извлечь 2 записи для каждого имени группы элемента столбца 1, которые в столбце 2 имеют наибольшее значение - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть таблица, как показано ниже. Теперь я хочу получить 2 записи для каждого имени группы элемента столбца 1, которые в столбце 2 имеют наибольшее значение. Например, выборка 85 и 75 для A, 65 и 45 для B ... Я использую базу данных оракула. TNX

 ----------------------
 |Column 1 | Column 2 |
 ----------------------
 |    A    |    85    |
 ----------------------
 |    A    |    75    |
 ---------------------
 |    A    |    60    |
 ---------------------
 |    A    |    50    |
 ---------------------
 |    B    |    65    |
 ---------------------
 |    B    |    45    |
 ---------------------
 |    B    |    35    |
 ---------------------
 |    B    |    25    |
 ---------------------

Ответы [ 4 ]

0 голосов
/ 13 ноября 2018

Попробуйте это

Вот демо решение

SQL

select col1,col2 from (select col1,col2, rank() over(partition by col1 order by col2 desc) as rn from t) q where q.rn<=2;
0 голосов
/ 13 ноября 2018

использование row_number оконная функция

with t1 as
(
 select col1,col2
 ,row_number() over(partition by col1 order by col2 desc) rn 
 from table_name
) select * from t1 where rn<=2
0 голосов
/ 13 ноября 2018

Вы можете использовать row_number():

select t.*
from (select t.*,
             row_number() over (partition by col1 order by col2 desc) as seq 
      from table t
     ) t
where seq <= 2;

Однако, пункт fetch first . . . также полезен:

select t.*
from table t
where t.col2 in (select t1.col2
                 from table t1
                 where t1.col1 = t.col1
                 order by t1.col2 desc
                 fetch first 2 rows only
                );
0 голосов
/ 13 ноября 2018

Попробуйте использовать row_number ()

select * from
(
select *, row_number() over(partition by col1 order by col2 desc) as rn
from tablename
) A where rn in (1,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...