2015-05-29 2 views
1

Я хотел бы, чтобы выбрать 3 лучших результатов функции ранга() для каждого разделаВыберите только 3 лучших ранжированный после ранга() над

Например, в этом запросе:

SELECT id, rank() over (PARTITION BY year order by ...) as rank 
FROM table1 
GROUP BY year 

Я бы хотел иметь 3 лучших рейтинга за каждый год.

я справлюсь, сделав новый:

Select * 
from ... 
where rank <= 3 

, но потом, если у меня есть некоторые равенства, я буду получать больше, чем 3 строки в год.

У кого-нибудь есть идея, как это решить?

+0

Как вы определяете 'лучшие результаты ранга()'? что делает их лучше всего? укажите больше столбцов – miraclefoxx

+0

Является ли рангом число (например, первое, второе, третье), где может быть несколько человек, разделяющих третье место? – SuperBiasedMan

ответ

2

У нас мало информации о ваших структурах таблиц и запросов, но в качестве общего решения я предлагаю добавить row_number() over (ORDER BY ... desc) as rn и фильтровать его тоже с where rn = 1, как here.

+0

Ну, на самом деле с помощью row_number() INSTEAD of rank() решена моя проблема ... Я не очень привык к этим функциям sql еще ... Большое вам спасибо! – Piloumpicou

+0

О, так что вы хотели достичь ... Пожалуйста, не стесняйтесь указывать более конкретные данные (имена таблиц, столбцы ...) – miraclefoxx

Смежные вопросы