Из вашего вопроса неясно, действительно ли у вас есть имя пользователя в таблице заданий или просто идентификатор.
Если у вас есть имя, то у вас есть вся необходимая информация в таблице заданий и Вы можете просто использовать lag()
.
Но если у вас есть идентификатор, вам нужно присоединиться к таблице пользователей, как для текущих, так и для идентификаторов задержки.Вы все еще можете получить предыдущий идентификатор таким же образом:
select id, job, id_user, id_direcction,
lag(id_user) over (partition by id_direcction order by id) as last_id_user
from jobs
, но затем использовать его в качестве CTE или встроенного представления и присоединиться к нему:
select j.id, j.job, u.name, j.id_direcction, lu.name as last_name
from (
select id, job, id_user, id_direcction,
lag(id_user) over (partition by id_direcction order by id) as last_id_user
from jobs
) j
join users u on u.id = j.id_user
left join users lu on lu.id = j.last_id_user
С помощью CTE для предоставленияпримеры данных и предположения о том, что на самом деле они содержат:
-- sample data
with users (id, name) as (
select 1, 'User1' from dual
union all select 2, 'User2' from dual
union all select 3, 'User3' from dual
),
jobs (id, job, id_user, id_direcction) as (
select 1, 'Football Match', 1, 1 from dual
union all select 2, 'Bascketball Match', 3, 1 from dual
union all select 3, 'Swimming Race', 2, 2 from dual
union all select 4, 'Handball Game', 3, 2 from dual
union all select 5, 'Tennis Match', 2, 3 from dual
)
-- actual query
select j.id, j.job, u.name, j.id_direcction, lu.name as last_name
from (
select id, job, id_user, id_direcction,
lag(id_user) over (partition by id_direcction order by id) as last_id_user
from jobs
) j
join users u on u.id = j.id_user
left join users lu on lu.id = j.last_id_user
order by j.id;
ID JOB NAME ID_DIRECCTION LAST_
---------- ----------------- ----- ------------- -----
1 Football Match User1 1
2 Bascketball Match User3 1 User1
3 Swimming Race User2 2
4 Handball Game User3 2 User2
5 Tennis Match User2 3
Вам не нужно обращаться к таблице direcctions
, если вы не хотите получить ее описание.Я включил версию, которая делает это в этой базе данных <> fiddle .
Как и @KaushikNayak, я не понимаю, как и почему вы ожидаете увидеть User3
противпоследняя строка на основе предоставленных вами данных.