가끔 sql을 통해 데이터를 뽑아내고자 할 때 어떤 기준에 의해 걸러진 가장 최신 데이터를 처리해야할 때가 있습니다.

예를 들면 기숙사 입사 신청자를 뽑고자 할 때 신청 학생의 성적중에서 가장 최근 것만 골라내고자 하는 경우가 있을 수 있습니다.

해당 학생이 전년도 혹은 전학기에 수강한 성적이 있으면 좋지만 그렇지 않고 휴학했다가 복학하는 경우에는 그냥 전년도 성적을 뽑으면 나오지 않기 때문에 해당 학생의 휴학 하기 전 마지막 성적 (이게 최근 성적이 되죠..)을 알아야 합니다..

이럴 때 RANK 기능을 사용하시면 됩니다. (오라클 DB를 기준으로 합니다만 아마 대부분 DB에서 비슷할 것으로 여겨집니다)

사용예제)
    SELECT  HB, YY, HK, PJ_PG, PJ_PGPK, RK
    FROM (SELECT HB, YY, HK, PJ_PG, PJ_PGPK, RANK() OVER (PARTITION BY HB ORDER BY YY DESC,
               HK DESC) AS RK FROM SKSJ_GYE )
    WHERE RK=1;

    - 구문의 의미 : 학생들이 각 학기마다 취득한 학점 합계를 최근 일순위만 뽑아서  학번순으로 표시해 줍니다.
           205---.   2006,   1,   4.5,     A+,   1
           206---.   2007,   2,   4.02,    A0,   1
           207---.   2008,   2,   4.15,    A0,   1
           208---.   2009,   2,   3.5,      B+,   1
           209---.   2009,   1,   3.68,    B+,   1

    - FROM 절에 핵심이 되는 SQL문이 들어갑니다. 
    - 이 SQL 문을 FROM 절에 넣어서 다시 돌린 것은 랭킹이 1인 즉, 가장 최근 데이터만 뽑기 위해서입니다.
    - FROM 절에 들어간 구문만 따로 실행하면 그룹핑한 값에 대해 여러개의 값이 있을 경우 최근 순서대로 
      랭킹이 매겨져서 표시됩니다.
           208---.   2009,   1,   4.5,     A+,   1
           208---.   2008,   2,   4.02,    A0,   2
           208---.   2008,   1,   4.15,    A0,   3
           209---.   2009,   2,   3.5,      B+,  1
           209---.   2009,   1,   3.68,    B+,  2

    
[ RANK() OVER (PARTITION BY HB ORDER BY YY DESC, HK DESC) AS RK ] 분석
   - PARTITION BY HB  : HB 라는 컬럼으로 데이터들을 Grouping 하겠다는 것입니다.
                                   그룹핑하기 원하는 컬럼명을 여기에 적으시면 되겠습니다.
   - ORDER BY YY DESC, HK DESC  : YY 컬럼을 최근 순으로 정렬하고, 다음에 HK 컬럼을 다시 정렬합니다.
                                   정렬하기 원하는 순서를 여기에서 정하시면 됩니다.
   

      

+ Recent posts