본문 바로가기

카테고리 없음

오라클(ORACLE) - 그룹별로 가장 큰 값, 최신값 가져오기 - RANK()

(*주의 : 출처는 내 머릿속)

Q. 테이블 안에 사람들의 방문 기록을 저장해 두었다고 하자.

데이터를 아이디 별로 묶고 아이디 마다 가장 최근 방문 기록만 추출해 보겠다.

 

NAME  VISIT_DATA  ID

 

홍길동 19/08/06 1

홍길동 19/08/08 1

홍길동 19/08/03 1

김수진 19/08/28 2

김수진 19/08/01 2

인은서 19/07/18 3

인은서 19/08/13 3

인은서 19/08/03 3

인은서 19/08/14 3​

 

 

 

Step 1. RANK() 함수 이용하기 ( PARTITION = 그룹 조건 , ORDER BY = 그룹내 순서 조건 )

SELECT NAME, ID, REGISTER_DATE,

RANK() OVER (PARTITION BY ID ORDER BY TO_CHAR(VISIT_DATE, 'YYYYMMDD') DESC) AS RNK

FROM TEST_2

NAME   VISIT_DATE  ID   RNK

홍길동 1 19/08/08 1

홍길동 1 19/08/06 2

홍길동 1 19/08/03 3

김수진 2 19/08/28 1

김수진 2 19/08/01 2

인은서 3 19/08/14 1

인은서 3 19/08/13 2

인은서 3 19/08/03 3

인은서 3 19/07/18 4

ID 로 그룹을 만들었기 때문에 ID 별로 가장 큰 VISIT_DATE부터 내림차순으로 RNK 가 만들어 진것을 볼수 있다.

Step2. RNK = 1 조건 두기 ( Step1 쿼리를 한번 감싸고 RNK = 1 이라는 WHERE 조건을 추가한다.

 

SELECT *

FROM ( SELECT NAME, ID, REGISTER_DATE,

RANK() OVER (PARTITION BY ID ORDER BY TO_CHAR(VISIT_DATE, 'YYYYMMDD') DESC) AS RNK

FROM TEST_2 )

WHERE RNK = '1'

<최종 결과>

NAME VISIT_DATE ID RNK

홍길동 1 19/08/08 1

김수진 2 19/08/28 1

인은서 3 19/08/14 1

 

* 사용자 별로 최근 방문 일자로만 뽑힌 데이터를 확인 할 수있다.

반응형