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 <group>, <sort>
FETCH FIRST <M> <group>, <N> 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:
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;