Oracle
 sql >> Database >  >> RDS >> Oracle

Usa TOP o Rank quando trovi le prime o la maggior parte delle osservazioni

Per ottenere le prime 100 persone assunte nell'azienda

Prima di tutto, nei risultati di entrambe le query di seguito sono inclusi i casi di pareggio. per esempio. anche se hai dipendenti con la stessa data di assunzione, sono inclusi negli elenchi, il che significa che gli elenchi hanno almeno 100 persone.

Se la versione del tuo database è 12c- , quindi devi utilizzare una sottoquery in cui restituire il risultato di dense_rank() funzione :

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 la versione del tuo database è 12c+ , quindi non è necessario utilizzare una sottoquery per il bene di fetch clausola :

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;

Presta attenzione per il tuo caso che utilizza partition by la clausola è sbagliata e dovrebbe essere rimossa all'interno di dense_rank() l'espressione della funzione e le date dell'ordine di assunzione non devono essere decrescenti ma crescenti.

Demo per i primi 10 dipendenti