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自然也就知道了。