Вам необходимо преобразовать подзапрос производного столбца (prepared_by
), аналогичный подзапросу pre_end_dt
, как показано ниже
Select
(Select pre_desig_id
From (Select pre_desig_id,
row_number() over (order by ID desc) as rn
From Authorization
Where project_id = 5
and pre_desig_id = 48
)
Where rn = 1) as prepared_by,
(Select pre_last_date
From (Select pre_last_date,
row_number() over (order by ID desc) as rn
From Authorization
Where project_id = 5
and pre_desig_id = 48
)
Where rn = 1) as pre_end_dt
From Authorization au
Left Join Project p
on au.project_id = p.project_id
Left Join Designation d
on au.au_desig_id = d.desigid;
, где Order By ID Desc
part выдает ошибку, которая должна быть заключена в дополнительный подзапрос, иначе компилятор не разрешит использовать Order By
напрямую, как это. то есть ограничение (rownum=1
) и использование order by
не могут работать на одном уровне, они должны существовать внутри внешнего и внутреннего операторов выбора соответственно.
На самом деле лучше использовать row_number()
аналитическую функцию окна, а не rownum
псевдостолбец, что в большинстве случаев ненадежно, так как генерируется перед сортировкой.
Даже если вам достаточно использовать Where rownum = 1
с order by ID desc
для внутреннего оператора выбора, достаточно выработать привычку, используя функцию row_number()
.