MySQL의 날짜 범위에서 누락된 날짜 채우기
어떤 경우에는 날짜 범위 내에서 날짜가 누락된 표가 나타날 수 있습니다. 이로 인해 데이터 분석 및 플로팅 프로세스가 중단될 수 있습니다. 이러한 격차를 해소하기 위해 MySQL은 누락된 날짜를 지정된 숫자 값으로 채우는 솔루션을 제공합니다.
특정 날짜와 관련된 점수를 기록하는 테이블의 예를 살펴보겠습니다. 일부 날짜가 생략된 경우 우리의 목표는 자리 표시자 값(예: 0)으로 날짜를 완성하여 연속 범위를 얻는 것입니다.
도전 과제
MySQL에는 기본 재귀 기능이 없지만 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>
<code class="language-sql">INSERT INTO `numbers` ( `id` ) VALUES ( NULL ); -- 添加足够多的空行以覆盖所需的日期范围</code>
이렇게 하면 날짜 범위에 필요한 만큼의 행이 생성됩니다. (참고: 삽입되는 행 수는 날짜 범위에 따라 조정되어야 합니다. NULL
을 삽입하는 것만으로는 충분한 행을 자동으로 생성할 수 없습니다.)
<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 형식의 원하는 시작 및 종료 날짜로 바꿉니다.
누락된 날짜를 입력하세요
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!