SQL Quiz -2- :: 2010/09/09 12:28

이화식 선생님이 대표로 있는 En-Core 사이트 두번째 퀴즈 문제.

아래와 같은 SAMPLE 테이블이 있다고 하자.

성명

시작일

종료일

홍길동

19961001

19981230

홍길동

19981230

19990605

홍길동

19990605

19991002

홍길동

20000201

20000301

홍길동

20000501

99991231

김동훈

19910106

19910731

김동훈

19910731

19940201

김동훈

19940201

19941021

김동훈

19941021

19961031

김동훈

19990501

20000331

김동훈

20000331

99991231

마동탁

19980103

19980727

마동탁

19980727

20000103

마동탁

20000103

20000601

마동탁

20000601

99991231

.

.

.

.

.

.


어떤 특정 사원은 이력이 중간에 끊어진 경우가 있는데 이러한 끊어진 시작일과 종료일을 추출하고자 한다.

사원별로 끊어진 시작일과 종료일을 추출하면 아래와 같은 결과가 나타난다.

성명

시작일

종료일

홍길동

19991002

20000201

홍길동

20000301

20000501

김동훈

19961031

19990501

●문제 : 위와 같은 결과를 추출할 수 있는 한개의 SQL문을 작성하시오

내가 작성한 답안 :

select a.name, b.end, a.start
from test.quiz2 a, test.quiz2 b
where a.start <> b.end
and a.rowid - 1 = b.rowid
and a.name = b.name
group by b.rowid;

모범답안 :

select name, end_r start_date, start_l end_date
from (select name, sum(decode(no,1,start_dt)) start_l, sum(decode(no,1,end_dt)) end_l,
              sum(decode(no,2,start_dt)) start_r, sum(decode(no,2,end_dt)) end_r
     from (select name, start_dt, end_dt, rownum rn
           from (select name, start_dt, end_dt
                  from quiz2
                 order by name, start_dt, end_dt )) x, copy_t y
     where y.no <= 2
     group by name, decode(no,1,rn,rn+1)
  )
where end_r <> start_l;

2010/09/09 12:28 2010/09/09 12:28
Trackback Address :: http://www.yongbi.net/trackback/315
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다
Name
Password
Homepage

Secret
< PREV |  1  |  ...  389  |  390  |  391  |  392  |  393  |  394  |  395  |  396  |  397  |  ...  566  |  NEXT >