Snay,
with s as
(select 'IVANOV' lastname, 'PETR' name, 'KR030311' id from dual union all
select 'PETROV' lastname, 'SIDR' name, 'KR030311' id from dual union all
select 'SIDOROV' lastname, 'IVAN' name, 'KR030311' id from dual union all
select 'IVANOV' lastname, 'PETR' name, 'RL040311' id from dual union all
select 'PETROV' lastname, 'SIDR' name, 'RL040311' id from dual
)
select lastname, name, max(decode(dr, 1, id)) id, max(decode(dr, 2, id)) next_id
from
(select s.*, dense_rank () over (partition by lastname order by id) dr
from s
)
group by lastname, name
order by lastname, name;
LASTNAM NAME ID NEXT_ID
------- ---- -------- --------
IVANOV PETR KR030311 RL040311
PETROV SIDR KR030311 RL040311
SIDOROV IVAN KR030311