> 데이터 베이스 > MySQL 튜토리얼 > MySQL 날짜 범위에서 누락된 날짜를 채우는 방법은 무엇입니까?

MySQL 날짜 범위에서 누락된 날짜를 채우는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-23 17:02:10
원래의
369명이 탐색했습니다.

How to Fill Missing Dates in a MySQL Date Range?

MySQL의 날짜 범위에서 누락된 날짜 채우기

어떤 경우에는 날짜 범위 내에서 날짜가 누락된 표가 나타날 수 있습니다. 이로 인해 데이터 분석 및 플로팅 프로세스가 중단될 수 있습니다. 이러한 격차를 해소하기 위해 MySQL은 누락된 날짜를 지정된 숫자 값으로 채우는 솔루션을 제공합니다.

특정 날짜와 관련된 점수를 기록하는 테이블의 예를 살펴보겠습니다. 일부 날짜가 생략된 경우 우리의 목표는 자리 표시자 값(예: 0)으로 날짜를 완성하여 연속 범위를 얻는 것입니다.

도전 과제

MySQL에는 기본 재귀 기능이 없지만 NUMBERS 테이블 트릭을 사용하여 자동 증가 열을 기반으로 날짜 시퀀스를 생성할 수 있습니다.

날짜 순서 생성

  1. NUMBERS 테이블 만들기:
<code class="language-sql">DROP TABLE IF EXISTS `numbers`;
CREATE TABLE `numbers` (
  `id` int(10) unsigned NOT NULL auto_increment,
   PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
로그인 후 복사
  1. 표 채우기:
<code class="language-sql">INSERT INTO `numbers`
  ( `id` )
VALUES
  ( NULL ); -- 添加足够多的空行以覆盖所需的日期范围</code>
로그인 후 복사

이렇게 하면 날짜 범위에 필요한 만큼의 행이 생성됩니다. (참고: 삽입되는 행 수는 날짜 범위에 따라 조정되어야 합니다. NULL을 삽입하는 것만으로는 충분한 행을 자동으로 생성할 수 없습니다.)

  1. 구성 날짜 순서:
<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY)
FROM `numbers` `n`
WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14';</code>
로그인 후 복사

날짜 '2010-06-06' 및 '2010-06-14'를 YYYY-MM-DD 형식의 원하는 시작 및 종료 날짜로 바꿉니다.

누락된 날짜를 입력하세요

  1. LEFT JOIN 만들기:
<code class="language-sql">SELECT `x`.`timestamp` AS `timestamp`,
          COALESCE(`y`.`score`, 0) AS `cnt`
FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `timestamp`
             FROM `numbers` `n`
            WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x
LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%Y-%m-%d') = `x`.`timestamp`;</code>
로그인 후 복사

y을 실제 데이터 테이블로 바꾸고 이에 따라 날짜 형식을 조정하세요. (형식 변환으로 인한 문제를 방지하기 위해 통일된 YYYY-MM-DD 형식 사용을 권장합니다.)

이 쿼리를 실행하면 지정된 범위의 전체 날짜 집합을 얻을 수 있으며 누락된 값은 지정된 0 값으로 채워집니다. (참고: numbers전체 기간을 포함하려면 표에 충분한 행이 미리 채워져 있어야 합니다.)

위 내용은 MySQL 날짜 범위에서 누락된 날짜를 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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