Вы можете использовать оконные функции.Вам нужна самая ранняя версия каждой записи, поэтому:
select t.*
from (select t.*,
row_number() over (partition by empid, empname, sal order by create_time) as seqnum
from t
) t
where seqnum = 1;
Если вы хотите обнаружить изменения , а не первое вхождение набора значений, вы можете использовать lag()
:
select t.*
from (select t.*,
lag(sal) over (partition by empid, empname order by create_time) as prev_sal
from t
) t
where prev_sal is null or prev_sal <> sal;
Это обрабатывает зарплаты, которые уменьшаются, а также увеличиваются.