> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 날짜 범위를 선택할 때 제로 성장 일을 포함하는 방법은 무엇입니까?

MySQL에서 날짜 범위를 선택할 때 제로 성장 일을 포함하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-31 17:31:10
원래의
894명이 탐색했습니다.

How to Include Zero-Growth Days When Selecting Date Ranges in MySQL?

MySQL: 성장 제로 일을 포함하는 범위에서 모든 날짜 선택

사용자 기반 성장을 시각화할 때 성장이 없는 날을 포함하는 것이 중요합니다. . MySQL에서 이를 달성하기 위해 우리는 데카르트 곱이라는 기술을 사용합니다.

다음 쿼리를 고려하십시오.

SELECT DATE(datecreated), count(*) AS number FROM users
WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW())
GROUP BY DATE(datecreated) ORDER BY datecreated ASC
로그인 후 복사

이 쿼리는 사용자가 한 명 이상인 날짜에 대한 결과를 반환합니다. 성장이 0인 날짜를 포함하기 위해 데카르트 곱에서 생성된 날짜 테이블을 만듭니다.

select date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*10000+n4.num*1000+n3.num*100+n2.num*10+n1.num DAY ) as date
from
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n1,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n2,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n3,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n4,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n5
로그인 후 복사

이렇게 하면 '2003-01-01'부터 'now()까지 순차적 날짜가 포함된 테이블이 생성됩니다. '를 사용하여 사용자 테이블과 왼쪽 조인을 수행할 수 있습니다.

select  * from (
select date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*10000+n4.num*1000+n3.num*100+n2.num*10+n1.num DAY ) as date from
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n1,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n2,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n3,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n4,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n5
) a
where date >'2011-01-02 00:00:00.000' and date < NOW()
order by date
로그인 후 복사

이 쿼리는 성장이 없는 날이 최종 테이블에 표시되도록 보장합니다. 결과입니다.

위 내용은 MySQL에서 날짜 범위를 선택할 때 제로 성장 일을 포함하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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