可能有一个非常简单的方法可以做到这一点,但我想不出来——我有一个数据集,它返回一个最小职位和最小生效日期,然后所有 effdts > 而不是 min_effdt。为了在图表程序中使用这些数据,我想对每个连续的 effdt 进行排名(如果存在),如 Min Role Effdt,然后是 2nd、3rd、Max。当然,每人可能有 2 到 20 个工作岗位。
起初我考虑尝试使用 case 语句,但我认为这在同时分析两列时不起作用。是否有允许排名的 SQL 语句?现在我的数据看起来像
员工编号 | 最低基本角色 | 最小角色效应 | 基本角色 | 角色效应
并且来自两张桌子,第二张桌子被带入两次以获得角色/ Effdt为Min,然后All大于Min。
我正在使用甲骨文。代码如下:
SELECT DISTINCT AL4.FULL_NAME,
AL4.EMPLOYEE_NUMBER,
AL4.HIRE_DATE,
AL4.DATE_OF_BIRTH,
AL4.AGE,
AL4.TERM_DATE,
AL4.ETHNIC_ORIGIN,
AL2.RECORDVALUE AS MIN_BASE_ROLE,
AL3.RECORDVALUE AS BASE_ROLE,
AL3.EFFECTIVE_START_DATE AS "ROLE EFFECTIVE DATE",
AL2.EFFECTIVE_START_DATE AS "MIN ROLE EFFDT"
FROM T1 AL2,
T2 AL3,
T3 AL4
WHERE AL4.PERSON_ID = AL2.PERSON_ID
AND AL4.PERSON_ID = AL3.PERSON_ID
AND AL4.EMPLOYEE_NUMBER = AL2.HISL_ID
AND AL4.EMPLOYEE_NUMBER = AL3.HISL_ID
AND AL2.RECORDTYPE = 'BASE_ROLE'
AND AL3.RECORDTYPE = 'BASE_ROLE'
AND AL2.EFFECTIVE_START_DATE = (SELECT MIN(A.EFFECTIVE_START_DATE) from T1 A where A.person_id = al2.person_id and a.recordtype = al2.recordtype)
AND AL3.EFFECTIVE_START_DATE > AL2.EFFECTIVE_START_DATE
AND (AL4.TERM_DATE >= '01-JAN-2012' or AL4.TERM_DATE is NULL)
order by AL4.EMPLOYEE_NUMBER