SELECT
    ei.EMPLOYEE_ID,
    -- 如果 eu.EMPLOYEE_ID 是 NULL (表示该员工无更新记录),则直接用主表职位。
    -- 否则,比较日期,决定使用新职位还是旧职位。
    CASE
        WHEN eu.EMPLOYEE_ID IS NULL THEN ei.POSITION
        WHEN eu.update_dt > ei.LAST_UPDATE_DT THEN eu.NEW_POSITION
        ELSE ei.POSITION
    END AS POSITION,
    -- 日期的逻辑与上面类似
    CASE
        WHEN eu.EMPLOYEE_ID IS NULL THEN ei.LAST_UPDATE_DT
        WHEN eu.update_dt > ei.LAST_UPDATE_DT THEN eu.update_dt
        ELSE ei.LAST_UPDATE_DT
    END AS LAST_UPDATE_DT
FROM
    EMPLOYEE_INFO AS ei
    LEFT JOIN (
        -- 从 EMPLOYEE_UPDATE 表中,为每个员工找出“唯一且最晚”的那条记录。
        SELECT
            t1.EMPLOYEE_ID,
            t1.NEW_POSITION,
            t1.update_dt
        FROM
            EMPLOYEE_UPDATE AS t1
            INNER JOIN (
                -- 1. 先用 GROUP BY 找出每个员工最晚的更新时间
                SELECT
                    EMPLOYEE_ID,
                    MAX(update_dt) AS max_dt
                FROM
                    EMPLOYEE_UPDATE
                GROUP BY
                    EMPLOYEE_ID
            ) AS t2
            -- 2. 然后用这个最晚时间去和原表做JOIN,把对应的那整行记录(包括职位)给捞出来
            ON t1.EMPLOYEE_ID = t2.EMPLOYEE_ID
            AND t1.update_dt = t2.max_dt
    ) AS eu ON ei.EMPLOYEE_ID = eu.EMPLOYEE_ID
ORDER BY
    ei.EMPLOYEE_ID;

# with
#     temp as (
#         row_number() over (
#             partition by
#                 employee_id
#             order by
#                 update_dt desc
#         ) as rn,
#         employee_id,
#         new_position,
#         update_dt
#         from
#             EMPLOYEE_UPDATE
#     )
# select
#     EMPLOYEE_ID,
#     case
#         when last_update_dt < update_dt then new_position
#         else position
#     end as position
# from
#     EMPLOYEE_INFO ei
#     left join temp t on t.EMPLOYEE_ID = ei.EMPLOYEE_ID
#     and t.rn = 1;