비즈니스 요구
시스템에 새로 추가 될 통계 기능 요건 일해서 특정 날짜 범위 통계 데이터를 지정하고, 데이터의 양의 시간 동안 매일 볼 수있게한다.
솔루션은
직접 통계에 의한 데이터 테이블 날짜 필드 그룹에 데이터가 일일 경우, 날짜가 비즈니스 요구에 부합하지 않은, 존재하지 않는 것을 발견. 바이두는 일부 프로그램이 발견 기본적으로 두 가지 : 첫째, 날짜의 새 목록, 그들로 향후 10 년의 날짜를 만든 다음 쿼리를 조인으로 통계 이야기, 두 번째는 SQL 로직의 응용 프로그램 코드 이상의 연속 날짜 통합 쿼리이다. 그들은 더 복잡합니다.
오라클의 참조 "이중에서 선택 수준이 수준에 연결 <(31)는" 아이디어의 실현 :
첫 번째 질의 1, 날짜 지정된 날짜의 목록은 밖으로 밖으로 범위
SELECT @cdate : = DATE_ADD ( @cdate 간격 - 1 하루 ) 등 입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 0 등 date_count FROM ( SELECT @cdate을 : = DATE_ADD (CURDATE () 간격 + 1 하루 ) 로부터 t_table1)를 T1을
2, 비즈니스 통계도 일 이상 문의 및 최신 통계에 문의 수는 별칭을 설정
SELECT FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' ) 로 입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 카운트 ( * ) 로 date_count 에서 t_table1 같이 m의 그룹 으로 FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' )
3, 0을 채우기 위해 함께 왼쪽, 날짜가 아닌 번호로 연결된 두 개의 쿼리를 촬영
SELECT t1.date_str, 유착 (t2.date_total_count, 0 ) 으로 date_total_count FROM ( SELECT @cdate : = DATE_ADD ( @cdate 간격 - 1 하루 ) 등 입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR FROM을 ( SELECT @cdate을 : = DATE_ADD (CURDATE () 간격 + 1 일 ) 에서 t_table1) tmp1 WHERE @cdate > ' 2018 - 12-01 ' )의 T1 LEFT이 JOIN( SELECT , FROM_UNIXTIME (m.sdate를 ' % Y- % M- % D ' ) 로 입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 카운트 ( * ) 로 date_total_count FROM t_table1 등 m WHERE m.sdate 사이 XXXX 와 XXXXX GROUP BY FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' ) ) T2 에 t1.date_str = t2.date_str
결과는 다음과 같습니다 :