日期:2014-05-17  浏览次数:21241 次

对一年中的每一天,每一季度,没个月,每一周,没一天进行统计

------解决方案--------------------
引用:
Quote: 引用:

按天统计,group by service_opentime即可。
按月统计,group by to_char(service_opentime,'yyyy-mm')
按周统计,group by to_char(service_opentiome,'IW')

全年中的每一天,使用下面sql进行左关联
SELECT TO_CHAR(SDATE + (ROWNUM - 1), 'yyyy-mm-dd') DDATE
   FROM (SELECT to_date(to_char(SYSDATE,'yyyy') 
------解决方案--------------------
 '-01-01','yyyy-mm-dd') SDATE,
                to_date(to_char(SYSDATE,'yyyy') 
------解决方案--------------------
 '-12-31','yyyy-mm-dd') EDATE
           FROM DUAL) T
 CONNECT BY SDATE + (ROWNUM - 1) <= EDATE;
比如说我现在需要统计2014-04 月每一天的总数 怎么弄?



SELECT T1.DDATE, T2.SS, T2.CC
  FROM (SELECT TO_CHAR(SDATE + (ROWNUM - 1), 'yyyy-mm-dd') DDATE
          FROM (SELECT TO_DATE('2014-04-01', 'yyyy-mm-dd') SDATE,
                       TO_DATE('2014-04-30', 'yyyy-mm-dd') EDATE
                  FROM DUAL) T
        CONNECT BY SDATE + (ROWNUM - 1) <= EDATE) T1,
       (SELECT TO_CHAR(SERVICE_OPENTIME, 'yyyy-mm-dd') SDATE,
               SUM(1) SS,
               COUNT(1) CC
          FROM T_AGENT_SERVICE_MSISDN
         WHERE TO_CHAR = (SERVICE_OPENTIME, 'yyyy-mm') = '2014-04'
         GROUP BY SERVICE_OPENTIME) T2
 WHERE T1.DDATE = T2.SDATE(+)

这个是将一个月的全遍历,就是即使表中没有2号的数据,也能有一条统计记录。如果没有这个需求的话,直接用下面的就行了:
SELECT TO_CHAR(SERVICE_OPENTIME, 'yyyy-mm-dd') SDATE,
               SUM(1) SS,
               COUNT(1) CC
          FROM T_AGENT_SERVICE_MSISDN
         WHERE TO_CHAR = (SERVICE_OPENTIME, 'yyyy-mm') = '2014-04'
         GROUP BY SERVICE_OPENTIME