쿼리 문의드립니다 0 2 577

by sm5 [Oracle 기초] [2020.05.25 11:01:24]


안녕하세요.

칼럼명  A        B        C(date 칼럼)    값 1111         ff               20130302

1111         hg             20130604

          1111       ff                 20170508

           2222       hj                20110364

           2222       ff                 2018042

.

.

.

이런 평범한 이력테이블 입니다.

 

A칼럼기준으로 C컬럼이 20130101~20150321 사이에

칼럼 B값  ff가 두번있는 A칼럼값 조회하고

조회된 ff두번 중에 C값이 가장빠른  날짜기준으로

두번째 ff C날짜까지 15개월 미만인 데이타를 가져오고 싶습니다.

 

가능할까요.

 

감사합니다

by 마농 [2020.05.25 13:16:01]
WITH t AS
(
SELECT 1111 a, 'ff' b, TO_DATE('20130302', 'yyyymmdd') c FROM dual
UNION ALL SELECT 1111, 'hg', TO_DATE('20130604', 'yyyymmdd') FROM dual
UNION ALL SELECT 1111, 'ff', TO_DATE('20170508', 'yyyymmdd') FROM dual
UNION ALL SELECT 2222, 'hj', TO_DATE('20110364', 'yyyymmdd') FROM dual
UNION ALL SELECT 2222, 'ff', TO_DATE('20180420', 'yyyymmdd') FROM dual
)
SELECT *
  FROM (SELECT a, b, c
             , LEAD(c)  OVER(PARTITION BY a ORDER BY c) d
             , COUNT(*) OVER(PARTITION BY a) cnt
          FROM t
         WHERE b = 'ff'
           AND c BETWEEN TO_DATE('20130101', 'yyyymmdd')
                     AND TO_DATE('20150321', 'yyyymmdd')
        )
 WHERE d < ADD_MONTHS(c, 15)
   AND cnt = 2
;

 


by sm5 [2020.05.26 11:30:17]

감사합니다

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