[SQL] 어떻게 MySQL의 날짜 격차를 채우기 위해?
SQL어떻게 MySQL의 날짜 격차를 채우기 위해?
내가 어떻게 MySQL의 날짜 간격을 채울 수 있습니까? 여기 내 쿼리는 다음과 같습니다
SELECT DATE(posted_at) AS date, COUNT(*) AS total, SUM(attitude = 'positive') AS positive, SUM(attitude = 'neutral') AS neutral, SUM(attitude = 'negative') AS negative FROM `messages` WHERE (`messages`.brand_id = 1) AND (`messages`.`spam` = 0 AND `messages`.`duplicate` = 0 AND `messages`.`ignore` = 0) GROUP BY date ORDER BY date
그것은 적절한 결과 집합을 반환 -하지만 난 날짜가 제로에 의해 시작과 끝 사이의 간격을 채우려. 나는이 어떻게 할 수 있습니까?
해결법
-
==============================
1.당신은 도우미 테이블을 만들고 끝으로, 그럼 그냥 LEFT 해당 테이블에 가입 처음부터 모든 날짜와 함께 작성해야합니다 :
당신은 도우미 테이블을 만들고 끝으로, 그럼 그냥 LEFT 해당 테이블에 가입 처음부터 모든 날짜와 함께 작성해야합니다 :
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
기본적으로, 당신이 여기에서 필요로하는 것은 더미 행 원본입니다.
MySQL은 그것을 생성하는 방법을 결여 유일하게 중요한 시스템이다.
PostgreSQL는 오라클과 SQL 서버 (따라서, CONNECT BY 재귀 CTE를) 재귀를 사용할 수 있지만, 그렇게 할 수있는 특수 기능 generate_series을 구현합니다.
-
==============================
2.나는 MySQL은 다음과 같은 / 비슷한 구문을 지원할지 모른다; 하지 않을 경우 그러나, 당신은 단지 작성하고 임시 테이블을 삭제할 수 있습니다.
나는 MySQL은 다음과 같은 / 비슷한 구문을 지원할지 모른다; 하지 않을 경우 그러나, 당신은 단지 작성하고 임시 테이블을 삭제할 수 있습니다.
--Inputs declare @FromDate datetime, /*Inclusive*/ @ToDate datetime /*Inclusive*/ set @FromDate = '20091101' set @ToDate = '20091130' --Query declare @Dates table ( DateValue datetime NOT NULL ) set NOCOUNT ON while @FromDate <= @ToDate /*Inclusive*/ begin insert into @Dates(DateValue) values(@FromDate) set @FromDate = @FromDate + 1 end set NOCOUNT OFF select dates.DateValue, Col1... from @Dates dates left outer join SourceTableOrView data on data.DateValue >= dates.DateValue and data.DateValue < dates.DateValue + 1 /*NB: Exclusive*/ where ...?
from https://stackoverflow.com/questions/1877874/how-to-fill-date-gaps-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가장 빠른 방법은 반경 MySQL을 내 포인트에 대한 큰 테이블을 조회하는 뭐죠 (위도, 경도) (0) | 2020.05.06 |
---|---|
[SQL] 이미 생성 된 테이블에 오라클에서 자동 증가 (0) | 2020.05.06 |
[SQL] 오라클 SQL은 - 연속 값 범위를 확인 (0) | 2020.05.05 |
[SQL] 어떤 방법은 전체 텍스트와 같은 이노에 검색을 달성하기 위해 (0) | 2020.05.05 |
[SQL] MySQL의 피벗 테이블의 열 데이터 행으로 (0) | 2020.05.05 |