J'ai une table avec une seule colonne COL01 utile pour ce besoin.
Je veux la 100ème valeur de cette colonne COL01.

J'ai cette requête, elle convient parfaitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select COL01 from 
( select COL01 , rank() over ( order by COL01) as rk  from MaTable )
where rk = 100
J'imagine qu'il y a une fonction analytique qui peut faire ça sans requête imbriquée mais je ne la trouve pas.
Ca c'est mon besoin d'aujourd'hui.

Mais j'imagine qu'il y a aussi une syntaxe pour réécrire la requête ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select   COL01, COL02, COL03 from 
( select  COL01, COL02 ,  COL03 rank() over ( partition by COL01  order by COL02) as rk  from MaTable )
where rk = 100
Autrement dit, dans chaque groupe identifié par COL01, récupérer la 100 ème plus petite valeur sur la colonne COL02, et récupérer la description COL03 correspondant à cette 100ème valeur.

Si au lieu de la 100ème ligne, je veux la 1ère ligne, je sais faire , avec MIN () KEEP (DENSE_RANK ...)
Mais pour une ligne arbitraire, autre que la 1ère ?