2016-06-26 1 views
0

Я хочу, чтобы запрос sql нашел верхний 2 пункта для каждой группы в оракуле.
Таблица содержит:Запрос Oracle, чтобы найти верхний 2 элемента для каждой группы

P_id Price GroupX 
1  10 a 
2  5  a 
3  5  a 
4  4  b 
5  8  b 
6  6  b 

Вывод должен быть:

P_id Price GroupX 
1  10  a 
2  5  a 
5  8  b 
6  6  b 

То, что я попытался это:

Select * from table 
group by GroupX 
order by price desc 
limit 2 
+0

Вы уверены, что используете Oracle? Ваш запрос не похож на запрос Oracle. –

ответ

0

Как насчет

Select rnk,P_id, Price, GroupX 
     from (
      select P_id, Price, GroupX, 
        RANK() OVER (PARTITION BY GroupX 
          ORDER BY Price DESC 
       ) AS rnk 
      from table 
      ) 
     where rnk <= 2; 
0

Вы можете у se ROW_NUMBER() аналитическая функция:

SELECT p_id, 
     price, 
     GroupX 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY groupX 
          ORDER BY Price DESC) AS rn 
    FROM table_name t 
) 
WHERE rn <= 2;