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

  1. case when的end要写在所有else语句后面
  2. 是如果晚于则更新,没有晚于(包括相等)就不用更新
  3. 更新表中有重复的部分,要先挑出最晚的那条