[PostgreSQL] 요소 별 최신 데이터 조회하기

2025. 3. 22. 00:56·개발 (Development)/PostgreSQL

1. DISTINCT ON 사용 (PostgreSQL 전용)

PostgreSQL에서는 DISTINCT ON을 사용하면 간단하게 해결할 수 있습니다.

SELECT DISTINCT ON (tagname) tagname, status, timestamp
FROM your_table
ORDER BY tagname, timestamp DESC;

설명

  • DISTINCT ON (tagname)을 사용하여 각 tagname별로 첫 번째 행만 선택합니다.
  • ORDER BY tagname, timestamp DESC를 지정하여 최신 timestamp 값이 먼저 오도록 정렬합니다.
  • 최신 데이터의 status 값을 가져올 수 있습니다.

2. 윈도우 함수 사용 (다른 DBMS에서도 활용 가능)

PostgreSQL 외의 다른 DBMS에서도 적용할 수 있는 ROW_NUMBER()를 이용하는 방법입니다.

SELECT tagname, status, timestamp
FROM (
    SELECT tagname, status, timestamp,
           ROW_NUMBER() OVER (PARTITION BY tagname ORDER BY timestamp DESC) AS rn
    FROM your_table
) sub
WHERE rn = 1;

설명

  • ROW_NUMBER() OVER (PARTITION BY tagname ORDER BY timestamp DESC)를 사용해 각 tagname 그룹 내에서 최신 데이터에 번호를 매깁니다.
  • WHERE rn = 1을 사용하여 각 tagname별 가장 최신 행만 선택합니다.

3. 예제 데이터 및 결과

tagname status timestamp
A OK 2024-03-18 10:00:00
A FAIL 2024-03-18 12:00:00
B OK 2024-03-18 09:30:00
B FAIL 2024-03-18 11:00:00
C WARN 2024-03-18 08:45:00

위 데이터를 기준으로 실행하면 다음과 같은 결과를 얻을 수 있습니다.

tagname status timestamp
A FAIL 2024-03-18 12:00:00
B FAIL 2024-03-18 11:00:00
C WARN 2024-03-18 08:45:00

4. 어떤 방법을 선택해야 할까?

  • PostgreSQL을 사용한다면 DISTINCT ON이 더 간결하고 효율적입니다.
  • 다른 DBMS에서도 적용하려면 ROW_NUMBER() 방식을 사용하면 됩니다.
반응형

'개발 (Development) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] MyBatis에서 PostgreSQL JSON 데이터 처리하기  (1) 2025.03.30
[PostgreSQL] 최댓값 구할 때 Max vs Order by  (0) 2025.03.22
[PostgreSQL] PostgreSQL에서 특정 값의 존재 여부 확인하여 조회하기  (0) 2025.03.16
PostgreSQL에서 기존 데이터가 있는 상태에서 복원하기  (0) 2025.02.23
[PostgreSQL] SQL Error Handling  (0) 2025.02.23
'개발 (Development)/PostgreSQL' 카테고리의 다른 글
  • [PostgreSQL] MyBatis에서 PostgreSQL JSON 데이터 처리하기
  • [PostgreSQL] 최댓값 구할 때 Max vs Order by
  • [PostgreSQL] PostgreSQL에서 특정 값의 존재 여부 확인하여 조회하기
  • PostgreSQL에서 기존 데이터가 있는 상태에서 복원하기
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (235) N
      • 개발 (Development) (168) N
        • Algorithm (1)
        • Angular (1)
        • AWS (7)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (33) N
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (12)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Vue.js
    python
    백준온라인저지
    백준
    백준알고리즘
    AWS
    java
    리눅스 마스터 2급
    DevOps
    Linux
    자바
    JPA
    JSON
    Linux master
    PostgreSQL
    Kubernetes
    javascript
    데이터분석
    백준자바
    springboot
    Kafka
    리눅스 마스터 2급 2차
    timescaledb
    deepseek
    파이썬
    MyBatis
    오답노트
    pandas
    ADsP
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[PostgreSQL] 요소 별 최신 데이터 조회하기
상단으로

티스토리툴바