2013-10-14 3 views
0

У меня есть таблица оракула с колоннами Config_ID, Escalation_LevelПоиск Nth Минимум значения Varchar в Oracle

В этой таблице Escalation_Level является Varchar со значениями «L0», «L1»,» L2 ',' L13 ',' L4 ',' L3 ',' L5 ',' L22 ',' L19 ',' L41''L98 ',' L99 'в беспорядочном порядке для Config_ID.

Как найти N-й MIN of Escalation_Level. Поскольку это тип Varchar, я не нахожу прямого пути.

Пожалуйста, поделитесь своими мыслями.

С уважением, Sriram

+0

Что вы попробовали? –

+1

Включает ли escalation_level 1 из показанных значений или содержит список значений, разделенных запятыми? – Rene

+0

Привет Рене, Escalation_Level содержит все приведенные выше значения в виде строк. Они НЕ являются значениями, разделенными запятыми. –

ответ

1

Если вы хотите найти Nth значение чего-либо, то аналитическая функция NTH_VALUE() является хорошим местом для начала.

Предполагая, что вы хотите, это основано на цифровой части только вы должны заменить все, что не является числом, для которого вы можете использовать REGEXP_REPLACE()

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

Для получения Nth значения для данного CONFIG_ID было бы :

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

где n является показателем значения, которое необходимо вернуть.

+0

Спасибо, Бен, это сработало! –

0

Только намек, вы должны использовать

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

таким образом, вы будете иметь возможность сделать Oracle, чтобы дать вам Nth положение каждого Escalation_Level. Когда вы должны применить фильтр.

В любом случае проверьте RANK и на DENSE_RANK аналитические функции в документации Oracle

Смежные вопросы