관심있는 모든 날짜가 포함 된 다른 표가 필요합니다. 당신은 다음과 같은 것을 가지고 비행 중에 그러한 것을 만들 수 있습니다.
설정 :
SQL> CREATE TABLE test_date (date_col) AS
2 (SELECT TO_DATE('01012016', 'ddmmyyyy') FROM DUAL UNION ALL
3 SELECT TO_DATE('02012016', 'ddmmyyyy') FROM DUAL UNION ALL
4 SELECT TO_DATE('02012016', 'ddmmyyyy') FROM DUAL UNION ALL
5 SELECT TO_DATE('04012016', 'ddmmyyyy') FROM DUAL UNION ALL
6 SELECT TO_DATE('04012016', 'ddmmyyyy') FROM DUAL UNION ALL
7 SELECT TO_DATE('06012016', 'ddmmyyyy') FROM DUAL UNION ALL
8 SELECT TO_DATE('06012016', 'ddmmyyyy') FROM DUAL
9 );
Table created.
질문 :
SQL> SELECT date_col2, COUNT(date_col)
2 FROM ( SELECT TO_DATE('01012016', 'ddmmyyyy') + LEVEL -1 AS date_col2
3 FROM DUAL
4 CONNECT BY TO_DATE('01012016', 'ddmmyyyy') + LEVEL -1 <= TO_DATE('10012016', 'ddmmyyyy')) dates
5 LEFT OUTER JOIN test_date ON (date_col = date_col2)
6 GROUP BY date_col2
7 ORDER BY 1;
DATE_COL2 COUNT(DATE_COL)
--------- ---------------
01-GEN-16 1
02-GEN-16 2
03-GEN-16 0
04-GEN-16 2
05-GEN-16 0
06-GEN-16 2
07-GEN-16 0
08-GEN-16 0
09-GEN-16 0
10-GEN-16 0
10 rows selected.
이 가입, 2016년 1월 1일 및 2016년 10월 1일 사이의 날짜를 고려 외부에서 테이블을 사용합니다 ; 관심있는 간격에 맞게 편집 할 수 있습니다.
1 월 1 일을 포함하려면 레벨 -1이 필요하다는 점을 제외하고는 정확합니다 (레벨은 1에서 시작하고 0이 아님). – mathguy
@mathguy : 네 말이 맞아, 내 잘못이야. 감사 – Aleksej