可能有一個非常簡單的方法來做到這一點,但我不能完全想到它 - 我有一個數據集返回最低職稱和最低生效日期,然後所有effdts> than min_effdt。爲了在製圖程序中使用這些數據,我想對每一個連續的effdt進行排名,如Min Role Effdt,然後是2nd,3rd,Max。當然,每人可以有2到20個工作崗位。SQL排名生效日期
起初我考慮過嘗試一個case語句,但我認爲這不會一次分析兩列。有沒有可以排名的SQL語句?現在我的數據看起來像
員工數|最小基地角色|最小角色Effdt |基地角色|角色Effdt
來自兩個表,第二個錶帶來兩次以獲得角色/ Effdt爲最小,然後所有大於最小。
我正在使用ORACLE。代碼如下:
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
您能否提供一些示例數據集?例如'With Table1 as(選擇'a'作爲col1從雙UNION ALL選擇'b'作爲col1從雙)select * from table1' – SriniV