개발/MSSQL

[SQL] PARTITION BY

한번사는인생. 2017. 9. 1. 17:18

PARTITION BY

Group By 한 결과 중에 1위 값만 가져오고 싶을 때 사용한다.

아래 예시는 타입별 가장 최근 데이터를 가져오는 쿼리이다.


1
2
3
4
5
6
7
8
9
    SELECT N.num, N.[type], N.title, N.reg_date
    FROM (
        SELECT 
            ROW_NUMBER() OVER (PARTITION BY [type] ORDER BY reg_date DESC) AS [rank],
            num, [type], title, reg_date
        FROM News.[NOTIFICATION]
        WHERE usable = ) AS N
    WHERE N.[rank] = 1
    ORDER BY [type] DESC;
cs


랭크 함수는 ROW_NUMBER() , RANK() 등 상황에 맞게 사용하면 된다.

Group By 할 컬럼 값을 PARTITION BY 다음에 작성하면 됩니다.

그러면 서브 쿼리에서 결과 값은

타입별 등록일시로 구분되어서 쿼리 결과가 나올 겁니다.


거기서 나온 결과 값 중 rank가 1인 결과값만 다시 추출하여

우리가 원하는 결과 값을 얻습니다.