我有一个包含 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 类型,我没有找到直接的方法。
请分享你的想法。
问候,斯里拉姆
我有一个包含 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 类型,我没有找到直接的方法。
请分享你的想法。
问候,斯里拉姆
如果你想找到任何东西的第 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您要返回的值的索引在哪里。
只是一个提示,你应该使用
RANK() OVER (PARTITION BY Config_ID ORDER BY Escalation_Level)
通过这种方式,您将能够使 Oracle 为您提供每个 Escalation_Level 的第 N 个位置。何时应用过滤器。
无论如何检查Oracle 文档中的RANK和DENSE_RANK分析函数