1、按天统计数据,没有补0
SELECT
b.DAY_TIME as abscissa_name,
nvl( a.ct, 0 ) as total
FROM
(
SELECT
to_char( t.REQUEST_TIME, 'yyyy-MM-dd' ) birthday,
count( 1 ) ct
FROM
ESB_LOG t
GROUP BY
to_char( t.REQUEST_TIME, 'yyyy-MM-dd' )
ORDER BY
to_char( t.REQUEST_TIME, 'yyyy-MM-dd' ) ASC
) a right join (
SELECT
TO_CHAR( TO_DATE( '2020-08-01', 'YYYY-MM-DD' ) + ROWNUM - 1, 'YYYY-MM-DD' ) DAY_TIME
FROM
DUAL CONNECT BY ROWNUM-1 <= TO_DATE( '2020-08-21', 'YYYY-MM-DD' ) - TO_DATE( '2020-08-01', 'YYYY-MM-DD' )
) b ON a.birthday = b.DAY_TIME
ORDER BY
b.DAY_TIME
2、按月统计,没有补0
SELECT
TO_CHAR( ADD_MONTHS( TO_DATE( '2020-08-20', 'yyyy-MM-dd' ), ROWNUM - 1 ), 'yyyy-MM' ) AS abscissa_name
FROM
DUAL CONNECT BY ROWNUM <= months_between(
to_date( '2021-11-10', 'yyyy-MM-dd' ),
to_date( '2020-08-20', 'yyyy-MM-dd' )) + 2;
SELECT
to_char ( REQUEST_TIME, 'yyyy-mm' ) abscissa_name,
count( * ) AS total
FROM
ESB_LOG
WHERE
to_char ( REQUEST_TIME, 'yyyy-mm-dd' ) BETWEEN '2020-08-20'
AND '2021-11-10'
GROUP BY
to_char ( REQUEST_TIME, 'yyyy-mm' );
SELECT
b.abscissa_name,
nvl ( a.total, 0 ) as total
FROM
(
SELECT
to_char ( REQUEST_TIME, 'yyyy-mm' ) abscissa_name,
count( * ) AS total
FROM
ESB_LOG
WHERE
to_char ( REQUEST_TIME, 'yyyy-mm-dd' ) BETWEEN '2020-08-20'
AND '2021-11-10'
GROUP BY
to_char ( REQUEST_TIME, 'yyyy-mm' )
) a
RIGHT JOIN (
SELECT
TO_CHAR ( ADD_MONTHS ( TO_DATE ( '2020-08-20', 'yyyy-MM-dd' ), ROWNUM - 1 ), 'yyyy-MM' ) AS abscissa_name
FROM
DUAL CONNECT BY ROWNUM <= months_between ( to_date ( '2021-11-10', 'yyyy-MM-dd' ), to_date ( '2020-08-20', 'yyyy-MM-dd' ) ) + 2
) b ON b.abscissa_name = a.abscissa_name
ORDER BY
b.abscissa_name