[Oracle] 해당 월의 말일자만 조회하기, 가장 최근 일자만 조회하기 (Feat. LAST_DAY 함수)

2022. 6. 22. 17:11·Database/Oracle
반응형

[ 상황 ]

매일 들어오는 데이터를 월별로 말일자만 집계하여 보려고 합니다.
이때, 해당월이 말일자에 도래하지 않아도 가장 최근 일자로 집계하여 보고자 합니다.
ex) 오늘이 2022-06-22인 경우, 2022-06-31의 데이터가 없으니 2022-06-22 데이터로 집계

[ 해결방법 ]

1) TABLE에 들어있는 날짜 데이터 파악하기

- 아래와 같이 날짜로 GROUP BY하여 조회하면 일자별로 데이터가 존재하는 것을 확인할 수 있습니다.

SELECT PROC_DATE
FROM TABLE
GROUP BY PROC_DATE
ORDER BY 1 DESC

2) LAST_DAY 함수 사용하기

LAST_DAY 함수란?
- 오라클에서 해당월의 마지막 날짜를 가져오는 함수
- 사용법

LAST_DAY(DATE 값)

- 예제
오늘이 2022-06-22일 때, LAST_DAY => 2022-06-30인 것을 확인할 수 있습니다.

SELECT LAST_DAY(SYSDATE)
     , SYSDATE
FROM DUAL;


- LAST_DAY 함수를 사용하면 아래와 같이 쉽게 말일자만 구할 수 있지만,
아직 말일자가 도래하지 않은 6월의 데이터는 확인할 수 없습니다.

SELECT PROC_DATE
FROM TABLE
WHERE PROC_DATE = LAST_DAY(PROC_DATE) --매월 말일자만 집계하도록 수정
GROUP BY PROC_DATE
ORDER BY 1 DESC

 

3) 말일자가 도래하지 않은 경우 가장 최근 날짜로 집계하기
- 아래와 같은 방법으로 하면 될 것 같다는 생각이 '번쩍' 떠올랐습니다.
말일자가 도래하지 않은 6월도 가장 최근 일자인 06-02일의 데이터가 조회됩니다. 성공!

SELECT PROC_DATE
FROM TABLE
WHERE PROC_DATE IN (SELECT MAX(PROC_DATE)
                    FROM TABLE
                   GROUP BY TO_CHAR(PROC_DATE, 'YYYY-MM')) 
GROUP BY PROC_DATE
ORDER BY 1 DESC


4) 원리 파악하기

- '년-월(YYYY-MM)' 형식으로 그룹하여 MAX값을 구하는 방식으로 해결했습니다.

SELECT PROC_DATE
     , TO_CHAR(PROC_DATE, 'YYYY-MM') AS YM
FROM TABLE
GROUP BY PROC_DATE
ORDER BY PROC_DATE DESC


- 현재 6월의 가장 최근 데이터는 2022-06-02 데이터 입니다.

년월로 그룹화하였을 때, 아래 2개의 데이터가 존재하는데
이 중에서 MAX값을 가져오면 월별로 가장 큰 날짜의 값을 구할 수 있습니다.


끝 !!

반응형

'Database > Oracle' 카테고리의 다른 글

[Oracle] comment로 테이블, 컬럼 찾기  (2) 2022.08.03
[Oracle] 오라클 날짜, 한글 요일 구하기 (Feat. TO_CHAR)  (0) 2022.07.01
[Oracle] 오라클 TRUNC 함수 사용법 (날짜, 시간, 소수점 절사하기)  (2) 2022.06.30
[Oracle] 천단위 구분기호 출력하는 방법  (0) 2022.06.23
[Oracle] 쿼리 속도 향상 시키기 (Feat. 좌변을 가공하지 않기)  (0) 2022.06.10
'Database/Oracle' 카테고리의 다른 글
  • [Oracle] 오라클 날짜, 한글 요일 구하기 (Feat. TO_CHAR)
  • [Oracle] 오라클 TRUNC 함수 사용법 (날짜, 시간, 소수점 절사하기)
  • [Oracle] 천단위 구분기호 출력하는 방법
  • [Oracle] 쿼리 속도 향상 시키기 (Feat. 좌변을 가공하지 않기)
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (258)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (73)
        • Spring Project (28)
        • Java (23)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24)
        • IntelliJ (2)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (17)
        • Oracle (11)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Git
    알고리즘
    구현
    github
    오라클
    spring
    BOJ
    solved.ac
    배열
    백준 자바
    for문
    단계별풀기
    java
    1차원 배열
    백준
    springboot
    백준알고리즘
    jpa
    문자열
    Oracle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Oracle] 해당 월의 말일자만 조회하기, 가장 최근 일자만 조회하기 (Feat. LAST_DAY 함수)
상단으로

티스토리툴바