AND to_char(A.CREATE_DATE, 'YYYYMMDD') = (CASE WHEN TO_CHAR(B.CREATE_DATE - 1,'d') IN ('1') THEN to_char(B.CREATE_DATE - 3, 'YYYYMMDD') WHEN TO_CHAR(B.CREATE_DATE - 1,'d') IN ('7') THEN to_char(B.CREATE_DATE - 2, 'YYYYMMDD') ELSE to_char(B.CREATE_DATE - 1, 'YYYYMMDD') END)
조건절에서 요일 분기로 비교값을 바꿔주거나
FROM B 절을 임의로 만들어낸 날짜와 JOIN해서 일,토는 빼고 가져오거나
하는등의 가공을 하면 될것입니다.
헌데 이 쿼리 Function base index가 아니면 인덱스 안타겠내요.
/* 원래 WORKING DAY 출력할때는 휴일 테이블이 필요합니다. 요청하신대로 먼저 기간에 맞춰서 날짜를 만들어봅니다. 1번테이블(WITH 문 이용) */ -- 1) 날짜만들기 ( 월~금요일 구하기 ) WITH T (DT) AS ( SELECT TO_DATE('20180618','YYYYMMDD') + LEVEL -1 FROM DUAL CONNECT BY LEVEL <= SYSDATE - TO_DATE('20180618','YYYYMMDD') + 1 ) SELECT DT , LAG(DT,1) OVER(ORDER BY DT ) BEF_DT -- 하루전 데이터 EX) LAG(DT,2) OVER(ORDER BY DT ) -- 이틀전 , ROW_NUMBER() OVER(ORDER BY DT ) RN , TO_CHAR(DT , 'DAY') DAY FROM T WHERE TO_CHAR(DT,'D') IN ( '2' , '3' ,'4' , '5' ,'6' ) -- 2) 1번 테이블과 JOIN 해서 WITH T (DT) AS ( SELECT TO_DATE('20180618','YYYYMMDD') + LEVEL -1 FROM DUAL CONNECT BY LEVEL <= SYSDATE - TO_DATE('20180618','YYYYMMDD') + 1 ) , COPY_T AS ( SELECT DT , LAG(DT,1) OVER(ORDER BY DT ) BEF_DT -- 하루전 데이터 EX) LAG(DT,2) OVER(ORDER BY DT ) -- 이틀전 , ROW_NUMBER() OVER(ORDER BY DT ) RN , TO_CHAR(DT , 'DAY') DAY FROM T WHERE TO_CHAR(DT,'D') IN ( '2' , '3' ,'4' , '5' ,'6' ) ) , DL_MCSERPED_DEV (CREATE_DATE , CS_ITEM_PATH_FILE ) AS ( SELECT TO_DATE('20180619','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180619','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180621','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180621','YYYYMMDD') , 'B' FROM DUAL UNION ALL SELECT TO_DATE('20180622','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180622','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180624','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180625','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180626','YYYYMMDD') , 'A' FROM DUAL UNION ALL SELECT TO_DATE('20180627','YYYYMMDD') , 'A' FROM DUAL ) SELECT A.DT , A.BEF_DT , B.CS_ITEM_PATH_FILE FROM COPY_T A , DL_MCSERPED_DEV B , DL_MCSERPED_DEV C WHERE A.DT = B.CREATE_DATE AND A.BEF_DT = C.CREATE_DATE AND B.CREATE_DATE >= TO_DATE('20180618' , 'YYYYMMDD') AND C.CREATE_DATE >= TO_DATE('20180618' , 'YYYYMMDD') AND B.CS_ITEM_PATH_FILE = C.CS_ITEM_PATH_FILE GROUP BY A.DT , A.BEF_DT , B.CS_ITEM_PATH_FILE HAVING COUNT(*) > 1