less than 1 minute read

개요

순서
💡 STEP1. SELECT 조회
💡 STEP2. 조회결과 중복값 존재
💡 STEP3. 중복값에서 특정 컬럼값의 내용중 특정패턴(여기서는 날짜) 의 크기 기준으로 정렬 수행
💡 STEP4. 정렬된 행에서 가장 큰 것만 출력

내용

SELECT *
FROM
(
SELECT 첨부파일관리번호
     , 첨부파일명 --Blang_A_adBanResult_20231001.txt  / Blang_B_adBanResult_202305.txt
     , ROW_NUMBER() OVER (PARTITION BY 
                         첨부파일명, 
                         CASE WHEN length(regexp_substr(첨부파일명, '₩d{8}')) = 8 then to_date(regexp_substr(첨부파일명, '₩d{8}'), 'YYYYMMDD') 
                              WHEN length(regexp_substr(첨부파일명, '₩d{6}')) = 6 then to_date(regexp_substr(첨부파일명, '₩d{6}'), 'YYYYMM') 
                              ELSE null
                         END
                         ORDER BY 첨부파일관리번호 desc) as rn
  FROM 테이블 T1
 WHERE 첨부파일명 LIKE 'Blang%'
)
WHERE rn = '1';

순서
💡 SELECT 조회
==> YYYYMMDD, YYYYMM 형태 파일이 존재

💡 조회결과 중복값 존재
==> 중복제거를 위해 ROW_NUMBER 를 작성

💡 중복값에서 특정 컬럼값의 내용중 특정패턴(여기서는 날짜) 의 크기 기준으로 정렬 수행
==> [첨부파일] 그룹별로 묶고 그안에서 [유형별]로 묶어서 파티션 처리 수행

💡 정렬된 행에서 가장 큰 것만 출력
==> 스칼라쿼리 에서 ‘1’ 조건.

Leave a comment