前言
基于项目实际应用,SQL没什么难度,主要是记录一下,方便以后复用
应用场景
统计最近30天的数据趋势。
最初的实现方式是直接基于日志表按日期进行group by,但是如果某天没有数据的话,当天就直接不显示了
所以考虑增加个临时表,或者说逻辑表,只显示最近30天的日期,当做主表,按日期统计的表用left join跟主表关联
其中,统计表的数据表结构设计来源于上一篇文章
统计SQL-Oracle
SELECT
A.DAY_VALUE,
coalesce( B.TOTAL_QUANTITY, 0 ) AS TOTAL_QUANTITY,
coalesce( B.TOTAL_COUNT, 0 ) AS TOTAL_COUNT,
coalesce( B.SUCCESS_COUNT, 0 ) AS SUCCESS_COUNT,
coalesce( B.FAIL_COUNT, 0 ) AS FAIL_COUNT
FROM
( SELECT TO_CHAR( SYSDATE + ROWNUM - 31, 'yyyy-MM-dd' ) AS DAY_VALUE,
ROWNUM AS SORT_NUM FROM DUAL CONNECT BY ROWNUM <= 31 ) A
LEFT JOIN (
SELECT
TO_CHAR( TO_DATE( M.ADDUP_CYCLE, 'yyyyMMdd' ), 'yyyy-MM-dd' ) AS DAY_VALUE,
SUM( M.SUCCESS_QUAN