Я бы использовал аналитические функции для этого. Вы хотите выбрать первое значение заработной платы для каждой комбинации ecode и внедренной даты, упорядоченной внедренной датой, чтобы поместить последнюю в верхнюю.
select
distinct
first_value(ecode) OVER (PARTITION BY ecode ORDER BY IMPLEMENTEDDATE DESC NULLS LAST) Ecode,
first_value(implementeddate) OVER (PARTITION BY ecode ORDER BY IMPLEMENTEDDATE DESC NULLS LAST) ImplementedDate,
first_value(salary) OVER (PARTITION BY ecode ORDER BY IMPLEMENTEDDATE DESC NULLS LAST) Salary
from
tbl_Salary;
"DISTINCT" будет держать нулевые строки в безвыходном положении, которые в противном случае были бы возвращены для других 3 версий Ecode = 7654321, которые мы отфильтровываем.
Результат:
ECODE IMPLEMENTEDDATE SALARY
----- --------------- ------
7654321 01/04/2007 650000
7654322 17/05/2010 250000
7654323 20/05/2010 350000