从相同 table 计算雇用后的年数

Calculate Years after Hire from same table

我需要根据 table 计算雇佣年份,现在确定如何实现它

案例如下

根据操作列,输出应如下所示,

如有任何帮助,我们将不胜感激。

非常感谢!

假设日期列确实是一个日期而不是一个荒谬的字符串,你可以只过滤:

select floor(months_between(sysdate, effective_start_date) / 12)
from t
where action = 'hire';

您可以将 MAXCASEGROUP 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

如果你想要完整的年份,那么你可以在年数上使用 TRUNCFLOOR,如果你想四舍五入到最接近的完整年份,那么使用 ROUND

db<>fiddle here