다시 질문 드립니다 0 2 665

by 안뇽 [SQL Query] [2018.07.29 09:41:55]


  

 

1.만약 금요일이라면 월요일과 비교할 방법

어떻게 접근해야될지를 모르겠네요ㅠㅠ

 

by chrome [2018.07.29 14:45:11]
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가 아니면 인덱스 안타겠내요. 

 


by 우리집아찌 [2018.07.30 09:20:04]
/*
원래 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 
 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입