улей - как выбрать первые N элементов для каждого матча - PullRequest
0 голосов
/ 30 октября 2018

Пожалуйста, рассмотрите таблицу улья - Таблица A, как указано ниже.

Этот базовый синтаксис SQL работает нормально, когда мы хотим получить «все» строки, которые соответствуют условию в предложении where. Я хочу ограничить возвращаемые строки числом - скажем, N - для каждого совпадения предложения where.

Позвольте мне объяснить на примере:

(1) Рассмотрим эту таблицу:

TableA
c1 c2
1.  a
1   b 
1   c 
2.  d
2.  e
2.  f

(2) Рассмотрим этот запрос:

SELECT c1, c2 
FROM TableA 
WHERE c1 in (1,2)

(3) Как вы можете себе представить, это дало бы такой результат:

Actual Results:
c1 c2
1.  a
1   b 
1   c  
2.  d
2.  e
2.  f

(4) Желаемый результат:

c1 c2
1.  a
1   b   
2.  d
2.  e

Вопрос: Как изменить запрос в # 2), чтобы получить желаемое упоминание в # 4).

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Для этого можно использовать функцию row_number.

select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum 
      FROM TableA
      --add a where clause as needed
     ) t 
where rnum <= 2 
0 голосов
/ 30 октября 2018

только 2 значения для c1

SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2

Более 2 значений, используйте rank()

select c1,c2 from 
(
    select c1,c2,rank() over (partition by c1 order by c2) as rank 
    from TableA 
) t 
where rank < 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...