DB: Oracle 18c
연속된 문자열(ID) 속에서 최대값을 구해야 해서 질문드립니다.
현재 상태가
10001, 10002, 10003, F1001, F1002, F1005, F1007, E1001, E1003, E1005, 10009, 11001, ..
이렇게 된 상태입니다.
조건에 따라 구해야 하는데
1. 문자로 시작하는 값들 중에 비어있는 값의 최소값 구하기
예) F1001, F1002, F1005, F1007 등 값이 있을때, 연속된 문자 중 F1003, F1004, F1006 이 있지만 F1003을 구해야 하고,
E1001, E1003, E1005 도 E1002, E1004가 비었지만 이 중 최소값인 E1002를 구해야 합니다.
2. 숫자로만 이루어진 값들 중 비어있는 값의 최소값 구하기
10001, 10002, 10003, F1001, F1002, F1005, F1007, E1001, E1003, E1005, 10009, 11001, .. 에서
10001, 10002, 10003, 10009, 11001, .. 만 숫자로 이루어져 있고 여기서 비어있는 값이 10004, 10005, 10006, 10007, 10008, 10010 값이 비었지만 이 중에 최소값인
10004 를 구해야 합니다.
이렇게 구하는건 어떻게 해야 하는지 가르침을 구합니다.
WITH t AS ( SELECT '10001' id FROM dual UNION ALL SELECT '10002' FROM dual UNION ALL SELECT '10003' FROM dual UNION ALL SELECT 'F1001' FROM dual UNION ALL SELECT 'F1002' FROM dual UNION ALL SELECT 'F1005' FROM dual UNION ALL SELECT 'F1007' FROM dual UNION ALL SELECT 'E1001' FROM dual UNION ALL SELECT 'E1003' FROM dual UNION ALL SELECT 'E1005' FROM dual UNION ALL SELECT '10009' FROM dual UNION ALL SELECT '11001' FROM dual ) SELECT MIN(x) empty_min_id FROM (SELECT SUBSTR(id, 1, 1) gb , SUBSTR(id, 1, 1) || LPAD(SUBSTR(id, 2) + 1, 4, '0') x , LEAD(id, 1, 'x') OVER(PARTITION BY SUBSTR(id, 1, 1) ORDER BY id) y FROM t ) WHERE x != y GROUP BY gb ;