> 데이터 베이스 > MySQL 튜토리얼 > MySQL 날짜 범위에서 누락된 날짜를 효율적으로 채우려면 어떻게 해야 합니까?

MySQL 날짜 범위에서 누락된 날짜를 효율적으로 채우려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-23 16:46:12
원래의
1078명이 탐색했습니다.

How Can I Efficiently Fill Missing Dates in a MySQL Date Range?

MySQL: 날짜 범위에서 누락된 날짜를 효율적으로 처리

이 가이드는 MySQL 데이터베이스 내 날짜 순서의 공백을 메우는 매우 효율적인 방법을 보여줍니다. 핵심 기술은 일련의 정수를 포함하는 간단한 테이블인 NUMBERS 테이블을 활용하여 누락된 날짜를 생성합니다. 이 NUMBERS 표를 데이터 표와 결합하면 데이터 포인트가 없는 경우에도 완전한 기간을 생성할 수 있습니다. 기존 점수는 유지됩니다. 누락된 점수는 기본값(예: 0)으로 표시됩니다.

NUMBERS 테이블 생성 및 채우기:

먼저 NUMBERS 테이블을 생성합니다(아직 존재하지 않는 경우).

CREATE TABLE IF NOT EXISTS numbers (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY);
로그인 후 복사

다음으로 충분한 수의 정수로 채웁니다. 행 수는 최소한 날짜 범위의 최대 일수 이상이어야 합니다. 간단한(매우 큰 범위의 경우 속도가 느릴 수 있음) 방법은 다음과 같습니다.

INSERT INTO numbers (id) VALUES (NULL); -- Repeat as needed to fill the desired range
로그인 후 복사

(참고: 매우 큰 범위의 경우 저장 프로시저나 외부 스크립트를 사용하는 등 NUMBERS 테이블을 채우는 더 효율적인 방법이 있습니다.)

전체 날짜 범위 생성:

다음 쿼리는 NUMBERS 테이블을 사용하여 일련의 날짜를 생성하고 해당 점수를 검색하여 누락된 날짜를 기본 점수 0으로 채웁니다.

SELECT 
    DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) AS timestamp,
    COALESCE(t.score, 0) AS score  -- Replace 't.score' with your actual score column
FROM 
    numbers n
LEFT JOIN 
    your_table t ON DATE(t.date_column) = DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) -- Replace 'your_table' and 'date_column'
WHERE 
    DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) <= '2010-06-15'; -- Adjust start and end dates as needed
로그인 후 복사

your_table, date_columnscore를 실제 테이블 및 열 이름으로 바꿔야 합니다. 원하는 범위가 포함되도록 DATE_ADD 함수에서 시작 날짜와 종료 날짜를 조정하세요. COALESCE 함수는 누락된 점수를 우아하게 처리합니다. 필요한 경우 DATE_FORMAT 기능을 사용하여 날짜 형식을 조정할 수 있습니다.

이 접근 방식은 MySQL 데이터에서 누락된 날짜를 관리하기 위한 확장 가능하고 효율적인 솔루션을 제공합니다. 매우 긴 기간에 대해 NUMBERS개의 테이블 채우기를 최적화하는 것을 고려해 보세요.

위 내용은 MySQL 날짜 범위에서 누락된 날짜를 효율적으로 채우려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿