这个最好有一张日期表(date,week_name,quater_name,month)
然后通过join来做group by

解决方案 »

  1.   

    你可以用先算出每一天属于第几周,然后再求,求每天所在的周数可以如下:
    trunc((starttime-第一个starttime)/7)+1.月,季,年都应该很好做,直接从STARTTIME中提取然后进行统计
      

  2.   

    周:
    select t.ID,t.Status,t.weekStartDate, t.weekEndDate, sum(Num),2
      from (select ID,Status,
                   --当前日期所在星期第一天
                   TO_CHAR(StartTime - TO_NUMBER(TO_CHAR(StartTime - 1, 'D')) + 1,
                           'YYYY-MM-DD') weekStartDate, 
                   --当前日期所在星期的最后一天
                   TO_CHAR(StartTime - TO_NUMBER(TO_CHAR(StartTime - 1, 'D')) + 7,
                           'YYYY-MM-DD') weekEndDate, 
                   Num
              from TB_DIAG_MACHINE_RUN_TIME) t
     group by t.ID,t.Status,t.weekStartDate, t.weekEndDate
     order by t.ID,t.weekStartDate