Демонстрационная настройка:
create table demo (a) as
select column_value
from table(sys.ora_mining_number_nt(8200.13, 7300.46, 8100.98, 8200.01));
Тест:
select min(a)
keep (dense_rank first
order by abs(a - 8200.11)) as closest
from demo;
CLOSEST
----------
8200.13
1 row selected.
SQL Скрипка
Функция first
возвращает первое значение x в порядке y . (Существует также соответствующая функция last
.) Подробнее
Если столбец является varchar2
(почему?), То неявное преобразование в число должно работать, если столбец не содержит неожиданные значения. Начиная с 12.2 вы можете избежать ошибок преобразования:
select min(a)
keep (dense_rank first
order by abs(to_number(a default null on conversion error) - 8200.11)) as closest
from demo;