我有一个带有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
答案 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文档中的RANK和DENSE_RANK分析函数