Вывести по 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