WITH
    temp AS (
        SELECT
            EMPLOYEE_ID,
            UPDATE_DT,
            NEW_POSITION
        FROM
            (
                SELECT
                    EMPLOYEE_ID,
                    UPDATE_DT,
                    NEW_POSITION,
                    ROW_NUMBER() OVER (
                        PARTITION BY
                            EMPLOYEE_ID
                        ORDER BY
                            UPDATE_DT DESC
                    ) AS rk
                FROM
                    EMPLOYEE_UPDATE
            ) AS a
        WHERE
            rk = 1
    )
SELECT
    b.EMPLOYEE_ID,
    COALESCE(t.NEW_POSITION, b.POSITION) AS POSITION,
    COALESCE(t.UPDATE_DT, b.LAST_UPDATE_DT) AS LAST_UPDATE_DT
FROM
    EMPLOYEE_INFO AS b
    LEFT JOIN temp AS t ON b.EMPLOYEE_ID = t.EMPLOYEE_ID
    AND b.LAST_UPDATE_DT < t.UPDATE_DT
ORDER BY
    b.EMPLOYEE_ID ASC

我的方法有点小麻烦,先用ROW_NUMBER窗口函数排除职位更新表的最近一次更新,然后再和员工表LEFT JOIN并且连结条件是要更新表的日期大于员工表,这样子要是不大于的话就会是NULL,再用COALESCE将NULL值用员工表中的正确数据替代就好了