> 데이터 베이스 > MySQL 튜토리얼 > 전체 날짜 범위에 대해 MySQL 쿼리에서 누락된 날짜를 어떻게 채울 수 있습니까?

전체 날짜 범위에 대해 MySQL 쿼리에서 누락된 날짜를 어떻게 채울 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-16 18:52:22
원래의
519명이 탐색했습니다.

How Can I Populate Missing Dates in MySQL Queries for Complete Date Ranges?

MySQL에서 날짜 범위에 대한 데이터 공백 채우기

두 특정 날짜 사이의 데이터를 검색해야 하는 시나리오가 발생할 수 있습니다. 해당 범위 내 특정 날짜에 대한 항목이 없습니다. 이 문제를 해결하기 위해 널리 사용되는 접근 방식은 "캘린더 테이블"을 만드는 것입니다.

다음 테이블 구조를 고려하세요.

CREATE TABLE data (
  date DATE,
  value INT
);

INSERT INTO data VALUES
  ('2009-06-25', 75),
  ('2009-07-01', 100),
  ('2009-07-02', 120);
로그인 후 복사

'2009-06-25'부터 2009년 6월 25일 사이의 모든 데이터를 검색하려면 '2009-07-01', 다음 쿼리를 사용할 수 있습니다.

SELECT date, value
FROM data
WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
로그인 후 복사

그러나 이 쿼리는 연관된 데이터가 없는 지정된 범위 내의 모든 날짜를 제외합니다. 이 문제를 해결하기 위해 달력 테이블이 사용됩니다.

주어진 날짜 범위에 대한 달력 테이블을 생성하려면 다음 단계를 수행할 수 있습니다.

CREATE TABLE cal (
  date DATE
);

INSERT INTO cal (date)
SELECT DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY)
FROM ints i CROSS JOIN ints j
WHERE DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) BETWEEN '2009-06-25' AND '2009-07-01';
로그인 후 복사

cal 테이블에는 모든 날짜가 포함됩니다. '2009-06-25'와 ​​'2009-07-01' 사이이지만 관련 데이터가 없습니다. 간격과 함께 원하는 데이터를 검색하려면 왼쪽 조인을 사용할 수 있습니다.

SELECT cal.date, data.value
FROM cal
LEFT JOIN data ON cal.date = data.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
로그인 후 복사

이 쿼리는 데이터가 없는 날짜를 포함하여 지정된 범위 내의 모든 날짜를 반환하며, 해당 날짜는 NULL 값으로 표시됩니다. 값 열입니다.

위 내용은 전체 날짜 범위에 대해 MySQL 쿼리에서 누락된 날짜를 어떻게 채울 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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