[답변] 고수는 아니지만... 0 2 2,003

by 성시현 [2007.07.19 14:05:00]


-- 테스트 데이터...

WITH
  t AS
   (   
 SELECT 111 AS 코드, '2007-07-01' AS 등록일자, '2007-07-01' AS 일자1, '2007-07-10' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-02' AS 등록일자, '2007-07-02' AS 일자1, '2007-07-11' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-03' AS 등록일자, '2007-07-03' AS 일자1, '2007-07-13' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-04' AS 등록일자, '2007-07-04' AS 일자1, '2007-07-14' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-06' AS 등록일자, '2007-07-07' AS 일자1, '2007-07-17' AS 일자2,  90 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-07' AS 등록일자, '2007-07-07' AS 일자1, '2007-07-17' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-08' AS 등록일자, '2007-07-08' AS 일자1, '2007-07-18' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-09' AS 등록일자, '2007-07-09' AS 일자1, '2007-07-19' AS 일자2, 100 AS 수량 FROM dual UNION ALL
    SELECT 111 AS 코드, '2007-07-10' AS 등록일자, '2007-07-10' AS 일자1, '2007-07-20' AS 일자2, 100 AS 수량 FROM dual
 )

 

-- 쿼리...;

SELECT
      코드
    , MIN(DECODE(gb2, 1, 등록일자)) AS 최근등록일자
    , MIN(DECODE(gb2, 1, 일자1)) AS 최근일자1
    , MIN(DECODE(gb2, 1, 일자2)) AS 최근일자2
    , MIN(DECODE(gb2, 1, 수량)) AS 최근수량
    , MIN(DECODE(gb1, 1, 등록일자)) AS 중도등록일자
    , MIN(DECODE(gb1, 1, 일자1)) AS 중도일자1
    , MIN(DECODE(gb1, 1, 일자2)) AS 중도일자2
    , MIN(DECODE(gb1, 1, 수량)) AS 중도수량
FROM(
    SELECT
          t.*
        , CASE  WHEN  LAG(TO_DATE(등록일자, 'YYYY-MM-DD'), 1, TO_DATE(등록일자, 'YYYY-MM-DD') - 1) OVER(PARTITION BY 코드 ORDER BY 등록일자)
                    = TO_DATE(등록일자, 'YYYY-MM-DD') - 1 THEN 0
                ELSE 1
          END AS gb1
        , CASE WHEN ROW_NUMBER() OVER(PARTITION BY 코드 ORDER BY 등록일자) = COUNT(*) OVER() THEN 1
          END AS gb2
    FROM t
    ) tt
WHERE gb1 = 1 OR gb2 = 1
GROUP BY 코드

 

건승하시길...수고하세요~~

by finecomp [2007.07.19 00:00:00]
만약 중간에 끊어진 일자가 2회 이상이면 요건에 맞춰 직접 조절 해 보세요...;

by 김창경 [2007.07.19 00:00:00]
허억, 감사합니다. 꾸벅...^^
정말로 도움이 되었습니다.
즐거운 하루되시기 바랍니다..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입