1.情景展示
查詢指定時間段內的某卡的每天的注冊量
2.原因分析
使用group by按天進行分組查詢,並將查詢結果看做一張表;
connect by遞歸查詢出指定時間段所橫跨的日期作為主表,注冊量作為輔表,與主表日期進行關聯查詢
3.解決方案
SELECT NVL(APP_ZS, 0) ONLINE_FORMAL, --''轉0 NVL(APP_LS, 0) ONLINE_INFORMAL, NVL(JG_ZS, 0) OFFLINE_FORMAL, NVL(JG_LS, 0) OFFLINE_INFORMAL, D.REGDATE REGTIME FROM (SELECT COUNT(1) APP_ZS, /*線上正式卡注冊量*/ TO_CHAR(V.REGTIME, 'YYYY-MM-DD') REGDATE FROM VIRTUAL_CARD V, APP_ACCESS A WHERE V.IDENTIFIER = A.ID GROUP BY TO_CHAR(V.REGTIME, 'YYYY-MM-DD')) ONLINE_FORMAL_CARD_REGIST, (SELECT COUNT(1) APP_LS, /*線上臨時卡注冊量*/ TO_CHAR(V.REGTIME, 'YYYY-MM-DD') REGDATE FROM VIRTUAL_CARD_INTERIM V, APP_ACCESS A WHERE V.IDENTIFIER = A.ID GROUP BY TO_CHAR(V.REGTIME, 'YYYY-MM-DD')) ONLINE_INFORMAL_CARD_REGIST, (SELECT COUNT(1) JG_ZS, /*線下正式卡注冊量*/ TO_CHAR(V.REGTIME, 'YYYY-MM-DD') REGDATE FROM VIRTUAL_CARD V, ORG_ACCESS O WHERE V.IDENTIFIER = O.ID GROUP BY TO_CHAR(V.REGTIME, 'YYYY-MM-DD')) OFFLINE_FORMAL_CARD_REGIST, (SELECT COUNT(1) JG_LS, /*線下臨時卡注冊量*/ TO_CHAR(V.REGTIME, 'YYYY-MM-DD') REGDATE FROM VIRTUAL_CARD_INTERIM V, ORG_ACCESS O WHERE V.IDENTIFIER = O.ID GROUP BY TO_CHAR(V.REGTIME, 'YYYY-MM-DD')) OFFLINE_INFORMAL_CARD_REGIST, /*左連接(以天為主表)*/ (SELECT TO_CHAR(TO_DATE('2020-06-01', 'YYYY-MM-DD') + ROWNUM - 1, 'YYYY-MM-DD') AS REGDATE FROM DUAL CONNECT BY ROWNUM <= TRUNC(TO_DATE('2020-06-17', 'YYYY-MM-DD') - TO_DATE('2020-06-01', 'YYYY-MM-DD')) + 1) D WHERE D.REGDATE = ONLINE_FORMAL_CARD_REGIST.REGDATE(+) AND D.REGDATE = ONLINE_INFORMAL_CARD_REGIST.REGDATE(+) AND D.REGDATE = OFFLINE_FORMAL_CARD_REGIST.REGDATE(+) AND D.REGDATE = OFFLINE_INFORMAL_CARD_REGIST.REGDATE(+) ORDER BY D.REGDATE;