从相同 table 计算雇用后的年数
Calculate Years after Hire from same table
我需要根据 table 计算雇佣年份,现在确定如何实现它
案例如下
根据操作列,输出应如下所示,
如有任何帮助,我们将不胜感激。
非常感谢!
假设日期列确实是一个日期而不是一个荒谬的字符串,你可以只过滤:
select floor(months_between(sysdate, effective_start_date) / 12)
from t
where action = 'hire';
您可以将 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
。
db<>fiddle here
我需要根据 table 计算雇佣年份,现在确定如何实现它
案例如下
根据操作列,输出应如下所示,
如有任何帮助,我们将不胜感激。
非常感谢!
假设日期列确实是一个日期而不是一个荒谬的字符串,你可以只过滤:
select floor(months_between(sysdate, effective_start_date) / 12)
from t
where action = 'hire';
您可以将 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
。
db<>fiddle here