By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select version();
version() |
---|
10.5.12-MariaDB |
CREATE TABLE earliest_start_date (
employee_number VARCHAR(40)
, old_employee_number VARCHAR(40)
, entity_id int
, original_start_date date
);
INSERT INTO earliest_start_date VALUES
('5041', 'A0EH', 96, current_date+0)
, ('A0EH', null , 96, current_date-5)
, ('XXXX', null , 88, current_date-8)
;
WITH RECURSIVE cte (employee_number, original_no, entity_id, original_start_date, n) AS (
SELECT employee_number, employee_number, entity_id, original_start_date, 1 FROM earliest_start_date WHERE old_employee_number IS NULL UNION ALL
SELECT new_tbl.employee_number, cte.original_no, cte.entity_id, cte.original_start_date, n+1
FROM earliest_start_date new_tbl
JOIN cte
ON cte.employee_number = new_tbl.old_employee_number
)
, xrows AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY entity_id ORDER BY n DESC) AS rn
FROM cte
)
SELECT * FROM xrows WHERE rn = 1
;
employee_number | original_no | entity_id | original_start_date | n | rn |
---|---|---|---|---|---|
XXXX | XXXX | 88 | 2021-09-02 | 1 | 1 |
5041 | A0EH | 96 | 2021-09-05 | 2 | 1 |
SELECT * FROM earliest_start_date;
employee_number | old_employee_number | entity_id | original_start_date |
---|---|---|---|
5041 | A0EH | 96 | 2021-09-10 |
A0EH | null | 96 | 2021-09-05 |
XXXX | null | 88 | 2021-09-02 |