Orcale按時間單位統計


一.Oracle統計時間範圍內的日,周,月:
--獲取日期列表:

SELECT TO_CHAR(TO_DATE('20200601', 'yyyyMMdd') + ROWNUM - 1, 'yyyyMMdd') as daylist
FROM DUAL
CONNECT BY ROWNUM <= trunc(to_date('20200712', 'yyyyMMdd') - to_date('20200601', 'yyyyMMdd')) + 1

                   
--獲取月份列表:

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('201912', 'yyyyMM'), ROWNUM - 1),'yyyyMM') as monthlist  
FROM DUAL  
CONNECT BY ROWNUM <= months_between(to_date('202007', 'yyyyMM'), to_date('201912', 'yyyyMM')) + 1

--獲取周列表: 獲取自然周   以週一開始  -週日結束

SELECT trunc(to_DATE('20200622', 'YYYYMMDD') + (ROWNUM - 1) * 7, 'iw') AS mon,trunc(to_DATE('20200622', 'YYYYMMDD') + (ROWNUM - 1) * 7, 'iw') + 6 AS sun
FROM DUAL
CONNECT BY ROWNUM <= (trunc(to_DATE('20200712', 'YYYYMMDD'), 'iw') + 6 - trunc(to_DATE('20200622', 'YYYYMMDD'), 'iw')) / 7 + 1


二.Oracle統計時間範圍內,按日,周,月統計記錄數

--時間單位是每日

SELECT t.countNum From
(
    SELECT to_char(signdate,'yyyymmdd'),count(1) countNum
    FROM HMAOP_MEMBERSIGN_RECORD 
    WHERE 1 = 1
      and telnum = '13677173658'
      and signdate >=TO_DATE('20190101', 'YYYYMMDD') 
      and signdate <=TO_DATE('20200101', 'YYYYMMDD') 
    group by to_char(signdate,'yyyymmdd')
 )t


--時間單位是每週,週一開始,週日結束

SELECT t.countNum From
(
 SELECT TRUNC(signdate,'iw'),count(1) countNum
    FROM  HMAOP_MEMBERSIGN_RECORD 
    WHERE 1 = 1
      and telnum = '13677173658'
      and signdate >=TO_DATE('20190101', 'YYYYMMDD') 
      and signdate <=TO_DATE('20200101', 'YYYYMMDD')
     group by TRUNC(signdate,'iw') 
 )t


--時間單位是每月

SELECT t.countNum From
(
    SELECT to_char(signdate,'yyyymm'),count(1) countNum
    FROM HMAOP_MEMBERSIGN_RECORD 
    WHERE 1= 1
      and telnum = '13677173658'
      and signdate >=TO_DATE('20190101', 'YYYYMMDD') 
      and signdate <=TO_DATE('20200101', 'YYYYMMDD') 
    group by to_char(signdate,'yyyymm')
 )t

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章