RANK() ; 순위매기는함수 (그룹별 1건의 데이터 가져오기)

Q. 이름별 최종 등록된 전화번호 찾기

SELECT 이름
           ,전화번호
  FROM (      
            SELECT RANK() OVER(PARTITION BY 이름 ORDER BY 등록일자 DESC ) RN
                       ,이름 
                      ,전화번호
                      ,등록일자
              FROM (SELECT '홍길동' 이름, '011-1234-0000' 전화번호, '20101201' 등록일자 FROM DUAL UNION ALL
                        SELECT '홍길동' 이름, '011-1234-1111' 전화번호, '20101202' 등록일자 FROM DUAL UNION ALL
                        SELECT '홍길동' 이름, '011-1234-2222' 전화번호, '20101203' 등록일자 FROM DUAL UNION ALL
                        SELECT '김대한' 이름, '010-5678-0011' 전화번호, '20101201' 등록일자 FROM DUAL UNION ALL
                        SELECT '김대한' 이름, '010-5678-9999' 전화번호, '20101207' 등록일자 FROM DUAL
                       )
          )

WHERE RN = 1      

A. 조회 결과

"김대한"|"010-5678-9999"
"홍길동"|"011-1234-2222"


[출처] RANK() ; 순위매기는함수 (그룹별 1건의 데이터 가져오기)|작성자 장미

----------------------------------------------------------------

*. over() - count, row_number()의 쓰임.

 

select
      count(n_name) over() as n_count,
      row_number() over(order by n_name desc) as RNUM,
      n_name,
      n_phone,
      n_date
from  ( SELECT '1' n_name, '011-1234-0000' n_phone, '20101201' n_date FROM DUAL UNION ALL
        SELECT '3' n_name, '011-1234-1111' n_phone, '20101202' n_date FROM DUAL UNION ALL
        SELECT '2' n_name, '011-1234-2222' n_phone, '20101203' n_date FROM DUAL UNION ALL
        SELECT '5' n_name, '010-5678-0011' n_phone, '20101201' n_date FROM DUAL UNION ALL
        SELECT '4' n_name, '010-5678-9999' n_phone, '20101207' n_date FROM DUAL
       );

A. 결과

5 1 5 010-5678-0011 20101201
5 2 4 010-5678-9999 20101207
5 3 3 011-1234-1111 20101202
5 4 2 011-1234-2222 20101203
5 5 1 011-1234-0000 20101201

+ Recent posts