쿼리 질문입니다. 0 3 2,716

by 강태훈 LEAD [2012.04.13 17:52:02]


안녕하세요?

쿼리를 짜야 되는데 잘 안되서 글을 남겨 봅니다.

예를 들어 테이블에..

date          |   value
---------------------------
20120201  |   A
20120101  |   B
20111201  |   B     <- 요값
20111101  |   A
20111001  |   B
20110901  |   A
20110801  |   B
20110701  |   B
20110601  |   A
.
.
.

위와 같이 일자에 따른 값이 들어있을 때..

그룹으로 봤을 때 B값이 나온 최근 그룹에서 제일 옛날날짜를 구하는 쿼리를 짤 수 있을까요?


by 비니부장 [2012.04.13 17:59:29]
select min(date) from table where value='B';

by 마농 [2012.04.13 19:00:49]
WITH t AS
(
SELECT '20120201' dt, 'A' v FROM dual
UNION ALL SELECT '20120101', 'B' FROM dual
UNION ALL SELECT '20111201', 'B' FROM dual
UNION ALL SELECT '20111101', 'A' FROM dual
UNION ALL SELECT '20111001', 'B' FROM dual
UNION ALL SELECT '20110901', 'A' FROM dual
UNION ALL SELECT '20110801', 'B' FROM dual
UNION ALL SELECT '20110701', 'B' FROM dual
UNION ALL SELECT '20110601', 'A' FROM dual
)
SELECT MAX(dt) dt
  FROM (SELECT dt, v
             , LEAD(v) OVER(ORDER BY dt DESC) x
          FROM t
        )
 WHERE v = 'B'
   AND NVL(x, 'x') != 'B'
;

by 강태훈 [2012.04.16 10:20:58]
답변 주신 바니부장님, 마농님 정말 감사드립니다. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입