Вывести по 3 строки, для каждой должности (2 таблицы: Сотрудники - Должности)

Помогите пожалуйста написать запрос MS SQL! Вывести по 3 самых старших сотрудников для каждой должности.

Таблицы:

[Employee] ID | NAME | AGE | POSITION_ID

[Positions] ID | NAME (FK to Employee POSITION_ID)


Ответы (2 шт):

Автор решения: teran

можно пронумеровать строки по убыванию возраста в каждой группе (row_number()) и выбрать, где номера меньше трех

WITH data AS (
    SELECT p.name as p, e.name as n, age
         , row_number() over (partition by p.id order by age desc) as rn
    FROM positions AS p
    INNER JOIN employee AS e ON ( e.position_id = p.id )
)
SELECT p, n, age
FROM data 
WHERE rn <= 3 
ORDER BY p, age DESC
→ Ссылка
Автор решения: TigerTV.ru

Еще один вариант:

select a.name, a.age, b.name from 
  (select name, age, position_id
  from (select * from Employee order by position_id, age desc) x
  group by position_id) as a
inner join Positions as b on a.position_id = b.id

http://sqlfiddle.com/#!9/81dc064/71

→ Ссылка