거래파일을 월별로 나눌 때 월 경계 날짜가 두 번 포함되지 않게 하기
발행
거래파일을 월별로 나눌 때 월 경계 날짜가 두 번 포함되지 않게 하기
거래파일을 월별로 나누면서 두 구간의 끝과 시작을 모두 포함하면 경계 거래가 두 번 집계될 수 있다. 원본에 중복 행이 없어도 필터 조건 때문에 생기는 중복이다. 먼저 어느 시간대와 날짜 필드를 기준으로 월을 정했는지 고정한 뒤 경계 포함 규칙을 정한다.
다음 달 첫 시점은 다음 구간에만 넣는다
가상의 거래 시각이 10월 31일 23:59, 11월 1일 00:00, 11월 1일 00:01이라고 하자. 10월 범위를 ‘10월 1일 00:00 이상, 11월 1일 00:00 미만’으로 정의하고 11월 범위를 ‘11월 1일 00:00 이상, 12월 1일 00:00 미만’으로 정의하면 세 기록은 각각 한 구간에만 들어간다.
반대로 10월 조건의 끝을 ‘11월 1일 00:00 이하’로 두면서 11월 조건도 같은 시각 이상으로 잡으면 가운데 기록이 양쪽에 들어간다. 원본 세 행을 합쳤는데 월별 집계 합은 네 행이 되는 이유다. PostgreSQL의 범위 설명에서 [)는 하한 포함·상한 제외를 뜻한다. 이 원리는 월별 표를 자르는 규칙을 명확히 표현하는 데 사용할 수 있다.
마지막 초를 직접 적는 방법은 주의한다
10월의 마지막 시간을 23:59:59로 적으면 그 뒤의 소수 초가 있는 자료를 놓칠 수 있다. 다음 달 시작 시점을 제외하는 방식은 저장 정밀도에 따라 마지막 순간을 임의로 추정할 필요를 줄인다. 날짜만 있는 자료와 시각까지 있는 자료의 처리도 구별한다. 문자열을 정렬한 것만으로 같은 날짜 비교가 되었다고 보지 않는다.
분할 후에는 원본의 유효 행 수와 월별 행 수 합, 경계 시각의 원본 ID를 대조한다. 이 글은 동일한 시간대가 이미 정해진 가상 기록에 대한 예다. UTC를 한국 날짜로 바꾸는 문제나 신고일·계약일 선택 문제까지 해결한 것으로 쓰지 않는다. 운영 데이터베이스에서 삭제하거나 중복 거래를 임의 제거하기 위한 절차도 아니다.
출처와 확인 범위
공식 원문 확인일: 2026-10-16. 아래 문서는 원리와 기능의 근거이며, 본문의 가상 수치·계산은 별도로 검산했다.