MySQL의 날짜 공백 채우기
문제:
특정 날짜에 대한 집계 데이터를 추출하려면 , MySQL 쿼리가 사용됩니다. 그러나 반환된 결과 집합에는 데이터가 있는 날짜만 포함되어 데이터가 없는 날짜 사이에 공백이 남습니다. 목표는 이러한 간격을 0으로 채워 연속적인 날짜 범위를 만드는 것입니다.
해결책:
이를 달성하려면 도우미 테이블이 필요합니다. 이 테이블에는 원하는 시작 날짜부터 원하는 종료 날짜까지의 모든 날짜가 포함됩니다.
CREATE TABLE dates ( dt DATE NOT NULL, PRIMARY KEY (dt) );
도우미 테이블은 쿼리를 사용하여 채울 수 있습니다.
INSERT INTO dates (dt) SELECT DATE(posted_at) FROM messages WHERE brand_id = 1 AND spam = 0 AND duplicate = 0 AND ignore = 0 GROUP BY DATE(posted_at) UNION SELECT DATE('2023-01-01') + INTERVAL i-1 DAY FROM ( SELECT 1 AS i UNION ALL SELECT i + 1 FROM <table> WHERE i < DATEDIFF('2023-12-31', '2023-01-01') ) AS i;
'2023-01 바꾸기 -01'과 '2023-12-31'을 원하는 시작일과 종료일로 입력하세요.
다음으로 도우미는 테이블은 원래 쿼리로 LEFT JOIN을 수행하는 데 사용됩니다.
SELECT d.dt AS date, COUNT(*) AS total, SUM(attitude = 'positive') AS positive, SUM(attitude = 'neutral') AS neutral, SUM(attitude = 'negative') AS negative FROM dates d LEFT JOIN messages m ON m.posted_at >= d.dt AND m.posted_at < d.dt + INTERVAL 1 DAYS AND spam = 0 AND duplicate = 0 AND ignore = 0 GROUP BY d.dt ORDER BY d.dt
이 수정된 쿼리는 원래 테이블에 데이터가 없는 날짜를 포함하여 0으로 채워진 모든 날짜가 포함된 원하는 결과 집합을 반환합니다.
위 내용은 MySQL 집계 쿼리의 날짜 간격을 0으로 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!