실무에서 맞닿드린 상황은, History(이력) 테이블에서 가장 최근 적재된 이력 중 "사용자 메모"에 대한 값을 가져오는 방법이다.
집계함수와 함께 사용되는 이 키워드를 통해
현재 적재된 메모 이력개수와 가장 최근에 기록한 메모를 추출하는 예제로 설명한다.
1. 예제 데이터
[TMP_TEST_01] |
- REG_DT : 등록날짜
- MEMO : 사용자 메모
2. 등록일 기준 마지막(최근)에 등록된 메모내용 조회
SELECT COUNT(*) || '개' AS MENO_CNT, MAX(MEMO) KEEP (DENSE_RANK LAST ORDER BY REG_DT ) AS CURR_MEMO FROM TMP_TEST_01;
[결과]
[설명]
KEEP은 단어상의 의미처럼 "SELECT" 영역에서 괄호안의 대상을 유지하는 것으로 이해할 수 있다.
또한, 위 쿼리의 "LAST" 부분을 "FIRST"로 변경하면 반대로 첫번째 데이터를 추출한다.
SELECT COUNT(*) || '개' AS MENO_CNT, MAX(MEMO) KEEP (DENSE_RANK FIRST ORDER BY REG_DT ) AS CURR_MEMO FROM TMP_TEST_01;
[결과]
3. 테스트 데이터
create table TMP_TEST_01 ( SEQ NUMBER, REG_DT DATE, PK_KEY VARCHAR2(10), MEMO VARCHAR2(200) )
INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-05'), 'CODE_A', '첫번째 메모' ); INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-06'), 'CODE_A', '두번째 메모' ); INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-07'), 'CODE_A', '세번째 메모' ); INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-08'), 'CODE_A', '네번째 메모' ); INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-09'), 'CODE_A', '다섯번째 메모' ); INSERT INTO TMP_TEST_01(SEQ, REG_DT, PK_KEY, MEMO) VALUES (SAMPLE_SEQ_01.nextval, TO_DATE('2022-04-10'), 'CODE_A', '여섯번째 메모' );
0 댓글