在Oracle中查找第N个最小值的Varchar值

时间:2013-10-14 08:39:52

标签: oracle

我有一个带有Config_ID,Escalation_Level

列的oracle表

在此表中,Escalation_Level为 Varchar ,其值为'L0','L1','L2','L13','L4','L3','L5 ','L22','L19','L41''L98','L99 '为Config_ID的混乱顺序。

如何找到Escalation_Level的Nth MIN。由于这是Varchar类型,我找不到直接的方式。

请分享您的想法。

此致 Sriram

2 个答案:

答案 0 :(得分:1)

如果你想找到任何东西的第N个值,那么分析函数NTH_VALUE()是一个很好的起点。

假设您只想根据数字部分进行此操作,则必须更换非数字的所有内容,您可以使用REGEXP_REPLACE()

select regexp_replace(escalation_level, '[^[:digit:]]')
  from my_table

要获得给定CONFIG_ID的第N个值,它将是:

select nth_value(escalation_level, n)
         over ( partition by config_id 
                    order by regexp_replace(escalation_level, '[^[:digit:]]') )
  from my_table

其中n是您要返回的值的索引。

答案 1 :(得分:0)

只是提示,你应该使用

RANK() OVER (PARTITION BY Config_ID ORDER BY Escalation_Level) 

通过这种方式,您可以让Oracle为您提供每个Escalation_Level的第N个位置。何时应该应用过滤器。

无论如何检查Oracle文档中的RANKDENSE_RANK分析函数