쿼리로 가능한가요? 0 3 606

by sm5 [SQL Query] [2020.10.27 13:52:46]


안ㅇ녕하세요.

 

데이타.
A칼럼          B칼럼날짜date       C칼럼
11                  20120201            T
 11                  20120302            C
11                    20140405           R
22
33
....

A칼럼  기준으로  C칼럼이 T인  대상 row 의 B칼럼의  날짜  이후의  row 를 모두출력해야 합니다.

 

감사합니다.


 

by 샤랄라 [2020.10.27 15:07:05]
with t(a, b, c) as
(select 11, '20120201', 'T' from dual union all
 select 11, '20120202', 'C' from dual union all
 select 11, '20140405', 'R' from dual union all
 select 11, '20140905', 'P' from dual union all 
 select 22, '20130601', 'T' from dual union all
 select 22, '20130408', 'C' from dual union all
 select 22, '20140609', 'R' from dual 
)
select t1.*
from t t1
   , t t2
where 1=1
and t1.a = t2.a
and t1.b > t2.b
and t1.c != 'T'
and t2.c = 'T'
;

select a, b, c
from (
select t.*, level as lv
from t
where c != 'T'
start with c = 'T'
connect by nocycle prior a = a
               and prior b < b
)
where lv = 2
; 

by 마농 [2020.10.27 15:32:45]

1. T 는 a 하나당 1건 뿐인가요?
 - 혹시 여러건이 존재할 가능성은 없는지?
 - 있다면? 결과가 어떻게 나와야 하는지?
2. "이후"의 의미를 어떻게 해석해야 할까요?
 - 결과에 T 가 포함되나요?
 - 결과에 T 가 제외되나요?

SELECT *
  FROM (SELECT a, b, c
             , MIN(DECODE(c, 'T', b)) OVER(PARTITION BY a) d
          FROM t
        )
 WHERE b >= d
;

 


by sm5 [2020.10.27 15:39:30]

안녕하세 마농님..

T는 A당 하나입니다.

그리고 T포함입니다.

 

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