Рассчитать годы после найма из той же таблицы - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть требование рассчитать год найма из таблицы, теперь уверен, как этого добиться

Ниже приведен случай

enter image description here

, и вывод должен выглядеть следующим образом на основе столбца действий:

enter image description here

Любая помощь будет принята с благодарностью.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Вы можете использовать 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.

дБ <> скрипка здесь

1 голос
/ 23 апреля 2020

Предполагая, что столбец даты действительно является датой, а не абсурдной строкой, вы можете просто отфильтровать:

select floor(months_between(sysdate, effective_start_date) / 12)
from t
where action = 'hire';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...