SQL> SELECT MIN(C1) KEEP (DENSE_RANK FIRST ORDER BY D1) OVER (PARTITION BY D2) FIRST FROM T;
FIRST
----------
15
15
15
15
6
6
6
6
12
12
12
FIRST
----------
12
3
3
3
3
9
9
9
9
20 rows selected.
T 테이블을 대상으로 d2 컬럼을 기준으로 파티션을 나눔 d1 컬럼을 기준으로 정렬한 후 첫번째 값들 추출 (FIRST) 그중 C1의 값이 제일 작은 값을 추출 (MIN)
위 글을 그림으로 나타내보면,
D2 컬럼을 기준으로 파티션이 생기게 되었다.
파티션이 나뉘고 FIRST 함수에 의해서 D1이 제일 작은 값을 선택함 ( 노란색으로 색칠된 행 )
3번째 파티션에는 D1의 값이 0으로 겹치는 행이 2개 존재한다. 이 중 MIN(C1) 함수에 의해 3의 값이 출력된다.
마찬가지로 LAST 함수를 사용해보자
SQL> SELECT MIN(C1) KEEP (DENSE_RANK LAST ORDER BY D1) OVER (PARTITION BY D2) LAST FROM T;
LAST
----------
5
5
5
5
11
11
11
11
2
2
2
LAST
----------
2
8
8
8
8
14
14
14
14
20 rows selected.
T 테이블을 대상으로 d2 컬럼을 기준으로 파티션을 나눔 d1 컬럼을 기준으로 정렬한 후 마지막 값들 추출 (LAST) 그중 C1의 값이 제일 작은 값을 추출 (MIN)
위 글을 그림으로 나타내보면,
파티션이 나뉘고 LAST 함수에 의해서 D1이 제일 큰 값을 선택 ( 노란색이 색칠된 행 )