sql >> Base de Datos >  >> RDS >> Oracle

Use TOP o Rank cuando busque las primeras o la mayoría de las observaciones

Conseguir las primeras 100 personas contratadas en la firma

En primer lugar, tenga cuidado con los casos de empate que se incluyen en los resultados de ambas consultas a continuación. p.ej. incluso si tiene empleados con la misma fecha de contratación, se incluyen en las listas, lo que significa que las listas tienen al menos 100 personas.

Si la versión de su base de datos es 12c- , entonces necesita usar una subconsulta para devolver el resultado de dense_rank() función :

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;

Si la versión de su base de datos es 12c+ , entonces no necesita usar una subconsulta por 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 atención para su caso que use partition by la cláusula es incorrecta y debe eliminarse dentro de dense_rank() la expresión de la función y el orden de las fechas de contratación no debe ser descendente sino ascendente.

Demostración de los 10 mejores empleados