Para conseguir as primeiras 100 pessoas contratadas na empresa
Em primeiro lugar, tenha cuidado com os casos de empate incluídos nos resultados de ambas as consultas abaixo. por exemplo. mesmo que você tenha funcionários com data de contratação igual, eles são incluídos nas listas, o que significa que as listas têm pelo menos 100 pessoas.
Se a versão do seu banco de dados for
12c-
, então você precisa usar uma subconsulta para retornar o resultado de dense_rank()
função:select department_name, department_id, first_name, hire_date, salary
from
(
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary,
dense_rank() over ( order by hire_date ) as e_rank_hire
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
)
where e_rank_hire <= 100
order by e_rank_hire;
Se a versão do seu banco de dados for
12c+
, então você não precisa usar uma subconsulta para fetch
cláusula:select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
order by hire_date
fetch first 100 rows with ties;
Preste atenção para o seu caso usando
partition by
cláusula está errada e deve ser removida dentro do dense_rank()
a expressão da função e a ordem das datas de contratação não devem ser decrescentes, mas crescentes. Demonstração para os 10 melhores funcionários