0

我有一个包含 Config_ID、Escalation_Level 列的 oracle 表

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

如何找到 Escalation_Level 的第 N 个 MIN。由于这是 Varchar 类型,我没有找到直接的方法。

请分享你的想法。

问候,斯里拉姆

4

2 回答 2

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您要返回的值的索引在哪里。

于 2013-10-14T12:35:36.490 回答
0

只是一个提示,你应该使用

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

通过这种方式,您将能够使 Oracle 为您提供每个 Escalation_Level 的第 N 个位置。何时应用过滤器。

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

于 2013-10-14T09:07:10.813 回答