with EMPLOYEE_INFO2 as (select EMPLOYEE_ID ,UPDATE_DT ,NEW_POSITION from ( select EMPLOYEE_ID ,UPDATE_DT ,NEW_POSITION ,rank()over(partition by EMPLOYEE_ID order by UPDATE_DT desc) rk from EMPLOYEE_UPDATE ) t where rk = 1) select EMPLOYEE_INFO.EMPLOYEE_ID ,if (UPDATE_DT > LAST_UPDATE_DT, NEW_POSITION, POSITION) as POSITION ,if (UPDATE_DT > LAST_UPDATE_DT, UPDATE_DT, LAST_UPDATE_DT) as LAST_UPDATE_DT from EMPLOYEE_INFO join EMPLOYEE_INFO2 on EMPLOYEE_INFO.EMPLOYEE_ID = EMPLOYEE_INFO2.EMPLOYEE_ID