SELECT
I.EMPLOYEE_ID,
CASE
WHEN I.LAST_UPDATE_DT >= U.UPDATE_DT THEN I.POSITION
ELSE U.NEW_POSITION END AS POSITION,
CASE
WHEN I.LAST_UPDATE_DT > U.UPDATE_DT THEN I.LAST_UPDATE_DT
ELSE U.UPDATE_DT END AS LAST_UPDATE_DT
FROM
EMPLOYEE_INFO I
JOIN
(
SELECT
EMPLOYEE_ID,
UPDATE_DT,
NEW_POSITION,
ROW_NUMBER() over (partition by EMPLOYEE_ID ORDER BY UPDATE_DT DESC) as rk
FROM
EMPLOYEE_UPDATE
) U ON I.EMPLOYEE_ID = U.EMPLOYEE_ID
WHERE
rk=1
ORDER BY
EMPLOYEE_ID ASC
- case when的end要写在所有else语句后面
- 是如果晚于则更新,没有晚于(包括相等)就不用更新
- 更新表中有重复的部分,要先挑出最晚的那条