Why are you joing a self join on PS_PERS_DATA_EFFDT ?
SELECT MAX(P.EFFDT) FROM PS_PERS_DATA_EFFDT P , PS_PERS_DATA_EFFDT E WHERE P.EMPLID = E.EMPLID AND P.EFFDT <= :1;
select max(effdt) from ps_pers_data_effdt where effdt <= :1;
so those functions are applied in order for the optimizer to be able to use that index.
create index i on t (col) descending