[DB]

회원별 마지막데이터

Stater 2025. 4. 30. 08:24



오라클에서 회원별로 마지막 데이터 한 줄씩 가져오려면 ROW_NUMBER()나 RANK()/DENSE_RANK() 같은 윈도우 함수를 활용하는 게 가장 깔끔합니다.

예를 들어 아래와 같은 테이블 구조라고 가정해볼게요:

SELECT USER_ID, DATA_VALUE, INSERT_DATE
FROM (
    SELECT
        USER_ID,
        DATA_VALUE,
        INSERT_DATE,
        ROW_NUMBER() OVER (PARTITION BY USER_ID ORDER BY INSERT_DATE DESC) AS RN
    FROM TABLE_NAME
)
WHERE RN = 1;

이렇게 되어 있을 때, 각 USER_ID 별로 가장 마지막 INSERT_DATE 기준으로 한 줄씩 가져오려면 이렇게 하면 돼요:

설명
• PARTITION BY USER_ID : 사용자별로 그룹 나눔
• ORDER BY INSERT_DATE DESC : 최근 날짜 순 정렬
• ROW_NUMBER() : 각 사용자 그룹 내에서 1번부터 번호 매김
• 최종적으로 RN = 1인 데이터만 가져오기

방법 2: MAX(INSERT_DATE) + JOIN 이용

만약 윈도우 함수 사용이 제한적이거나 구버전 오라클이라면 아래처럼도 가능:


SELECT T.USER_ID, T.DATA_VALUE, T.INSERT_DATE
FROM TABLE_NAME T
JOIN (
    SELECT USER_ID, MAX(INSERT_DATE) AS MAX_DATE
    FROM TABLE_NAME
    GROUP BY USER_ID
) M
ON T.USER_ID = M.USER_ID
AND T.INSERT_DATE = M.MAX_DATE;

반응형