최신값만 가져오기 질문 0 2 122

by Harut [2018.09.14 18:01:25]


안녕하세요. 공부중에 막히는 부분이 있어서 질문드립니다.

사원의 사번, 성명, 임용상태가 들어있는 A테이블,

사원의 사번, 년도별 실적점수가 들어있는 B테이블을 조인하여 현재 임용상태가 '임용'인 사원의 최신년도 실적점수를 받아오고 싶습니다.

(B테이블에는 2015, 2016, 2017, 2018년 등 년도별로 실적점수가 정리되어있고, 최신년도가 2018년이 아닌 경우도 있습니다. 예를들어 철수라는 사원은 최신년도가 2018년이고 영희라는 사원은 2017년일때, 철수는 2018년의 점수를, 영희는 2017년의 점수를 받아와야합니다.)

*원하는 결과물*

'철수' '3점'

'영희' '8점'

'민지' '4점'

......

 

ORDER BY 후 ROWNUM = 1을 사용하여 해결해보려 했으나, 사원당 1개씩의 데이터를 출력하려는 부분을 어떻게 해야할지 모르겠네요...

글을 너무 난잡하게 작성하여 보기 불편하시겠지만 도움주시면 감사하겠습니다...

by 야신 [2018.09.14 18:53:52]
WITH emp(empno, ename, reg_status) AS ( 
SELECT 1, '철수','임용' FROM dual UNION ALL
SELECT 2,'영희','임용'  FROM dual UNION ALL
SELECT 3,'민지','임용' FROM dual UNION ALL
SELECT 4,'AAA','' FROM dual)
, reg_status(empno, reg_yyyy, score) AS
( select 1, '2017', 3 from dual union all
select 2, '2018',8 from dual union all
select 3, '2017',4 from dual )
    
SELECT A.empno,A.ename
,MAX(B.score) KEEP (DENSE_rank FIRST order by reg_yyyy desc) as score
,MAX(B.reg_yyyy) KEEP (DENSE_rank FIRST order by reg_yyyy desc) as reg_yyyy
FROM emp      A
, reg_status  B
where A.empno= B.empno
and   A.reg_status = '임용'
group by A.empno,A.ename

또는

SELECT empno,ename, score, reg_yyyy
FROM (
        SELECT A.empno,A.ename, B.score, B.reg_yyyy
        ,row_number() OVER (PARTITION BY A.empno order by reg_yyyy desc) as rn
        FROM emp      A
        , reg_status  B
        where A.empno= B.empno
        and   A.reg_status = '임용'
      )
WHERE rn = 1;     

 


by Harut [2018.09.17 09:08:52]

감사합니다!

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