with
    temp as (
        select
            employee_id,
            max(update_dt) as update_dt
        from
            EMPLOYEE_UPDATE
        group by
            employee_id
    )

首先先建立一个临时表,从EMPLOYEE_UPDATE选取每个员工的最大更新日期

    (
        select
            temp.employee_id,
            temp.update_dt,
            new_position as position
        from
            temp
            join EMPLOYEE_UPDATE e
        where
            temp.employee_id = e.employee_id
            and temp.update_dt = e.update_dt
    ) a

这一部分是为了知道在EMPLOYEE_UPDATE中,每个员工最新更新后的职位,作为a表。之后要和EMPLOYEE_INFO(b表)比较。

select
    a.employee_id as EMPLOYEE_ID,
    case
        when a.update_dt > b.last_update_dt then a.position
        else b.position
    end as POSITION,
    case
        when a.update_dt > b.last_update_dt then a.update_dt
        else b.last_update_dt
    end as LAST_UPDATE_DT
from
    (
        select
            temp.employee_id,
            temp.update_dt,
            new_position as position
        from
            temp
            join EMPLOYEE_UPDATE e
        where
            temp.employee_id = e.employee_id
            and temp.update_dt = e.update_dt
    ) a
    join EMPLOYEE_INFO b on a.employee_id = b.employee_id
order by
    a.employee_id asc;

将这两个表合并后,用case when 比较a表和b表中的日期谁大,谁大谁就是真的最新更新日期,position自然也就知道了。