안녕하세요
조인을 하는데 해결이 안되네요..
예를 들어서
학생테이블(학번(pk), 이름)
게시판테이블(게시글번호(pk), 학번, 게시글등록날짜, 게시글내용)
이렇게 두 테이블이 있다고 할때 한 학생이 게시판에 글을 여러번 남길 수 있고
게시글을 남길때마다 게시판 테이블에 행이 하나씩 추가됩니다.
이런상황에서 '모든 학생에 대해 각각의 학생들이 마지막으로 글을 남긴 날짜'만 빼오고 싶습니다
조건으로 특정 기간을 주어서 이 기간동안 게시글을 남긴 학생의 최종 게시 날짜
또 반대로 특정 기간동안 게시글을 남기지 않은 학생리스트
이렇게 결과를 출력해야합니다.
조인을 하면 게시글을 여러번 남긴학생의 경우 한 학생마다 여러행이 생기게 되고..
학번을 distinct 해봤는데 그래도 여러행으로 나오게 되네요.....
조언부탁드립니다ㅠㅠ
windows 함수를 이용하시면 될 거 같습니다.
with tmp_a as (select '000001' as 학번, '홍길동' as 이름 from dual union all select '000002' as 학번, '전우치' as 이름 from dual ), tmp_b as (select 1 as 게시글번호, '000001' as 학번, '20150120' as 게시글등록날짜, '내용1' as 내용 from dual union all select 2 as 게시글번호, '000001' as 학번, '20150121' as 게시글등록날짜, '내용2' as 내용 from dual union all select 3 as 게시글번호, '000002' as 학번, '20150121' as 게시글등록날짜, '내용3' as 내용 from dual union all select 4 as 게시글번호, '000001' as 학번, '20150122' as 게시글등록날짜, '내용4' as 내용 from dual union all select 5 as 게시글번호, '000002' as 학번, '20150122' as 게시글등록날짜, '내용5' as 내용 from dual ) select * from ( select a.학번 , a.이름 , b.게시글등록날짜 , row_number() over (partition by a.학번 order by b.게시글등록날짜 desc) as rnum from tmp_a a , tmp_b b where a.학번 = b.학번(+) ) where rnum = 1