SQL에서 날짜 자동 완성을 구현하는 방법: 먼저 특정 범위의 달력 테이블 데이터를 생성한 다음 이 달력 테이블 연결을 통해 통계 데이터 테이블이 필요한 데이터를 쿼리합니다. 데이터.
최근 통계적 접근 기능을 개발할 때 데이터 테이블에서 특정 날짜의 데이터가 누락된 경우 해당 날짜에 대한 기록을 하지만 표시할 때 해당 날짜의 데이터가 여전히 필요합니다. 그렇지 않으면 기본값이 0이 될 수 있습니다.
1의 두 가지 해결 방법을 생각합니다. 프로그램 루프에서 데이터가 누락되었습니다. 그러나 이를 위해서는 7일, 30일 또는 60일을 포함할 수 있는 다양한 범위의 통계 데이터가 필요합니다. 프로그램을 통해 데이터를 완성하는 것은 약간 번거롭습니다.
2. 먼저 일정 범위의 달력 테이블 데이터를 생성한 다음 이 달력 테이블 연결을 사용하여 통계 데이터 테이블이 필요한 데이터를 쿼리합니다. 이 범위 내에서 전체 범위를 얻을 수 있으므로 데이터를 사용할 수 있으므로 이 솔루션은 이러한 수요 변화에 더 적합합니다.
이제 다음 sql 문을 통해 달력 테이블을 생성합니다.
CREATE TABLE num (i INT);-- 创建一个表用来储存0-9的数字 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间 CREATE TABLE IF NOT EXISTS calendar(DATE DATE); -- 生成一个存储日期的表,date是字段名 -- 这里是生成并插入日期数据 INSERT INTO calendar(DATE) SELECT ADDDATE( ( -- 起始日期,从2017-1-1开始 DATE_FORMAT("2017-1-1", '%Y-%m-%d') ), numlist.id ) AS `date` FROM ( SELECT n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000 AS id FROM num n1 CROSS JOIN num AS n10 CROSS JOIN num AS n100 CROSS JOIN num AS n1000 ) AS numlist;
sql을 실행하면 2017-01-01~2044-05-18까지 1W 레코드가 생성됩니다. 이 데이터는 오랫동안 충분하므로 해당 조건을 수정하여 더 많은 데이터를 생성할 수도 있습니다. 여기서는 자세히 설명하지 않고 필요에 따라 수정하면 됩니다.
다음 SQL 테스트를 실행합니다.
SELECT COUNT(u.id) AS num, c.date FROM calendar AS c LEFT JOIN users AS u ON c.date = u.`created_at` WHERE c.date BETWEEN '2017-05-01' AND '2017-05-07' GROUP BY c.`date` ORDER BY c.`date`
다음 결과를 얻습니다.
위 내용은 SQL에서 자동 날짜 완성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!