Utiliser une fonction analytique
SELECT value
FROM (SELECT value,
dense_rank() over (order by value asc) rnk
FROM table)
WHERE rnk = 2
Les fonctions analytiques RANK
, DENSE_RANK
, et ROW_NUMBER
sont identiques à l'exception de la façon dont ils gèrent les liens. RANK
utilise un processus de style sportif pour départager les égalités, donc si deux rangées sont à égalité pour un rang de 1, la rangée suivante a un rang de 3. DENSE_RANK
donne aux deux lignes à égalité pour la première place un rang de 1, puis attribue à la ligne suivante un rang de 2. ROW_NUMBER
rompt arbitrairement l'égalité et donne à l'une des deux lignes avec la valeur la plus basse un rang de 1 et l'autre un rang de 2.