Overview:
- Oracle 23ai introduces partition by clause in fetch first clause to get top-N rows per group.
 - A query’s syntax
 
          SELECT ……..
          FROM    ……..
          ORDER BY 
   
    , 
    
     
          FETCH FIRST 
      
      
       , 
       
         ROWS ONLY
       
      
     
    
   
Where:
- Group: A Column or expression used to group rows
 - M: Specify how many different groups you want to return
 - Sort: A column or expression used to sort rows ASC|DESC
 - N: Specifies the first rows for each group returned
 
In this blog, I’ll show two demos demonstrating partition use by fetching the first clause to get top-N rows per group.
Prerequisites:
- Oracle Database 23ai
 
Demo #1
- Fetch the two highest-paid employees for the first three departments.
 
Where:
- Group: Column departments.department_id.
 - M: 3
 - Sort: Column employees.salary DESC
 - N: 2
 
SELECT department_id,department_name, salary, first_name, last_name FROM employees join DEPARTMENTS USING (DEPARTMENT_ID) ORDER BY department_id, salary DESC FETCH FIRST 3 PARTITION by department_id, 2 ROWS ONLY;
Demo #2
- Fetch the latest hired employee in each department
 
Where:
- Group: Column departments.department_id
 - M: Set to a large value. For example, 10000000
 - Sort: Column employees.hire_date DESC
 - N: 1
 
SELECT DEPARTMENT_ID, HIRE_DATE, first_name, last_name FROM employees ORDER BY DEPARTMENT_ID, HIRE_DATE DESC FETCH FIRST 999999999999 PARTITION by DEPARTMENT_ID, 2 ROWS ONLY;