Найти самого старшего сотрудника
Имеется таблица работников
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;