Използвайте аналитична функция
SELECT value
FROM (SELECT value,
dense_rank() over (order by value asc) rnk
FROM table)
WHERE rnk = 2
Аналитичните функции RANK
, DENSE_RANK
и ROW_NUMBER
са идентични с изключение на начина, по който се справят с връзките. RANK
използва процес в спортен стил на прекъсване на равенството, така че ако два реда се изравнят за ранг 1, следващият ред има ранг 3. DENSE_RANK
дава на двата реда, свързани за първо място, ранг 1 и след това присвоява на следващия ред ранг 2. ROW_NUMBER
произволно прекъсва равенството и дава на единия от двата реда с най-ниска стойност ранг 1, а на другия ранг 2.