오라클에서 회원별로 마지막 데이터 한 줄씩 가져오려면 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;
'[DB]' 카테고리의 다른 글
[DB] 관계형 데이터베이스와 오라클 데이터베이스 (0) | 2023.08.15 |
---|---|
[DB] 데이터 모델 (0) | 2023.08.15 |
ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다. 오라클 에러 (0) | 2020.02.06 |
Oracle Database Express Edition 18g(설치 방법 오라클 설치방법 오라클 디비 설치방법) (0) | 2020.02.04 |
h2 database 설치 및 실행법 (0) | 2019.11.15 |