Найти самого старшего сотрудника

Имеется таблица работников

CREATE TABLE worker (
worker_id       INT,
last_name       VARCHAR(30) NOT NULL,
first_name      VARCHAR(30) NOT NULL,
middle_name     VARCHAR(30),
birth_date      DATE NOT NULL,
dismis_date     DATE,
FOREIGN KEY(department_id) REFERENCES department(department_id) ON DELETE SET NULL);

И таблица департаментов

CREATE TABLE department (
department_id   INT,
department      VARCHAR(30),
PRIMARY KEY(department_id));

В поле dismis_date установлена дата увольнения сотрудника, или значение null. Как мне получить самых старших из не уволенных сотрудников (dismis_date)? Например следующего сотрудника который который младше самого старшего, но в поле dismis_date у него установлено значение null. Мой запрос

SELECT cr.*
FROM worker w
INNER JOIN
(
    SELECT MIN(birth_date) max_age, department_id
    FROM worker 
    GROUP BY department_id
) w1
    ON w.department_id = w1.department_id AND w.birth_date = w1.max_age;

Возвращает старших сотрудников совместно с уже уволенными.


Ответы (1 шт):

Автор решения: Akina
WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY department_id ORDER BY birth_date) rnk
    FROM worker
    WHERE dismis_date IS NULL )
SELECT *
FROM cte
WHERE rnk = 1;
→ Ссылка