【问题标题】:Finding Nth Minimum of a Varchar value in Oracle在 Oracle 中查找 Varchar 值的第 N 个最小值
【发布时间】:2013-10-14 20:35:36
【问题描述】:

我有一个包含 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 个最小值。由于这是 Varchar 类型,我没有找到直接的方法。

请分享你的想法。

问候, 斯里拉姆

【问题讨论】:

  • escalation_level 是否包含 1 个显示的值,还是包含逗号分隔的值列表?
  • 嗨 Rene,Escalation_Level 包含所有上述值作为行。它们不是逗号分隔值。

标签: oracle


【解决方案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 是您要返回的值的索引。

【讨论】:

    【解决方案2】:

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

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

    这样你就可以让Oracle给你每个Escalation_Level的第N个位置。何时应用过滤器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2021-12-16
      相关资源
      最近更新 更多