Вы можете использовать MAX
с CASE
и GROUP By
person_number
:
SELECT person_number,
MONTHS_BETWEEN(
SYSDATE,
MAX( CASE WHEN action = 'HIRE' THEN effective_start_date END )
) / 12 AS Number_of_years
FROM table_name
GROUP BY person_number;
Так что для ваших образцов данных:
CREATE TABLE table_name ( person_number, effective_start_date, action ) AS
SELECT 100, DATE '2000-07-01', 'HIRE' FROM DUAL UNION ALL
SELECT 100, DATE '2002-01-02', 'MANAGER CHANGE' FROM DUAL UNION ALL
SELECT 100, DATE '2014-06-20', 'PROMOTION' FROM DUAL UNION ALL
SELECT 100, DATE '2019-10-10', 'LOCATION CHANGE' FROM DUAL;
Это выводит:
PERSON_NUMBER | NUMBER_OF_YEARS
------------: | ----------------------------------------:
100 | 19.81079360190163281561131023496614894467
Если вам нужны полные годы, вы можете использовать TRUNC
или FLOOR
для количества лет, а если хотите округлить до ближайшего полного года, используйте ROUND
.
дБ <> скрипка здесь