쿼리질문 0 4 1,149

by 궁금이 [SQL Query] [2016.03.15 18:49:33]


날짜를 아래와같이 입력하면  플래그에 따라서 결과가 그 밑에 처럼 나오게함

플래그가 N이면 날짜는 그대로

Y이면 그 다음에 N을 만날때까지의 날짜

 

인풋 :

날짜         플래그

20160101   N

20160102   Y

20160103   Y

20160104   Y

20160105   Y

20160106   N

20160107   N

 

결과값 :

날짜       플래그   날짜(결과)

20160101   N   20160101  

20160102   Y    20160106

20160103   Y    20160106

20160104   Y    20160106

20160105   Y    20160106

20160106   N    20160106

20160107   N    20160107

 

by jkson [2016.03.15 19:03:39]
with t as
(
select '20160101' dt, 'N' flg from dual union all
select '20160102' dt, 'Y' flg from dual union all
select '20160103' dt, 'Y' flg from dual union all
select '20160104' dt, 'Y' flg from dual union all
select '20160105' dt, 'Y' flg from dual union all
select '20160106' dt, 'N' flg from dual union all
select '20160107' dt, 'N' flg from dual
)
select dt, flg, 
       decode(flg,'N',dt
                     ,min(decode(flg,'N',dt,null)) 
                     over(order by dt rows between 1 following 
                                           and unbounded following)) nxt 
  from t
 

 


by 마농 [2016.03.16 08:13:28]
SELECT dt, flg
     , DECODE(flg, 'N', dt
       , LEAD(DECODE(flg, 'N', dt)) IGNORE NULLS OVER(ORDER BY dt)
       ) nxt
  FROM t
;

 


by 마농 [2016.03.16 09:45:34]
SELECT dt, flg
     , MIN(DECODE(flg, 'N', dt)) OVER(ORDER BY dt
       ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) nxt
  FROM t
;

 


by jkson [2016.03.16 11:51:20]

헐ㅋ 딥마인드한테 배워야겠네요. 제가 생각이 얕아서ㅋ

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