Если вам нужно только barcode
из строки с наибольшим product_barcode_type_code
для указанного продукта, то вы можете сделать это без подзапроса или явной функции ранжирования, используя last
:
select max(barcode) keep (dense_rank last order by product_barcode_type_code) as barcode
from product_barcode
where product_no = 111333666;
Вы можете включить предложение partition by
, но нет никакого смысла, поскольку вы в любом случае фильтруете по одному product_no
.
Очень быстрая демонстрация:
-- CTE for sample data
with product_barcode (product_no, product_barcode_type_code, barcode) as (
select 111333666, 1, 1234 from dual
union all select 111333666, 2, 2345 from dual
union all select 111333666, 3, 25000111133335555 from dual
)
select max(barcode) keep (dense_rank last order by product_barcode_type_code) as barcode
from product_barcode
where product_no = 111333666;
BARCODE
-----------------
25000111133335555
(Я предположил, что ваш product_no
, по крайней мере, является числовым типом, а не строкой, и поэтому пропустил одинарные кавычки, которые были у вас вокруг искомого литерального значения; но если это на самом деле строка, то включите теконечно ..)