根据天来算周、月、季、年,

根据天来算周、月、季、年,求助!!!已知 表 IDStartTimeEndTimeNumStatusType 012013/11/25 00:00:012013/11/2

根据天来算周、月、季、年,求助!!!
已知 表
 ID       StartTime             EndTime            Num     Status    Type
 01   2013/11/25 00:00:01     2013/11/26 23:59:59   24        1        1
 01   2013/11/26 00:00:01     2013/11/26 23:59:59   24        1        1
 01   2013/11/27 00:00:01     2013/11/27 23:59:59   24        1        1
 01   2013/11/28 00:00:01     2013/11/28 10:05:00   10        1        1
 02   2013/11/21 00:00:01     2013/11/21 23:59:59   24        1        1
 02   2013/11/22 00:00:01     2013/11/22 23:59:59   24        1        1
 02   2013/11/25 00:00:01     2013/11/25 23:59:59   12        1        1
 02   2013/11/25 00:00:01     2013/11/25 23:59:59   12        0        1
 02   2013/11/26 00:00:01     2013/11/26 23:59:59   20        1        1
 02   2013/11/26 00:00:01     2013/11/26 23:59:59    4        0        1
 02   2013/11/27 00:00:01     2013/11/27 23:59:59   24        1        1
 02   2013/11/28 00:00:01     2013/11/28 10:05:00   12        0        1

问:已知ID每天的状态小时,然后根据ID和状态进行分组统计,然后分别算出周、月、季、年的小时
注:Status(状态0:正常;1:不正常;)Type(时间类型:1:天;2:周;3:月;4:季;5:年)
结果:
ID       StartTime                EndTime            Num     Status    Type
01     2013/11/25 00:00:01    2013/12/1 23:59:59     72        1         2
02     2013/11/18 00:00:01    2013/11/24 23:59:59    48        1         2
02     2013/11/25 00:00:01    2013/12/1 23:59:59     56        1         2
02     2013/11/25 00:00:01    2013/12/1 23:59:59     28        0         2
01     2013/11/1 00:00:01     2013/11/30 23:59:59    72        1         3
02     2013/11/1 00:00:01     2013/11/30 23:59:59   104        1         3
02     2013/11/1 00:00:01     2013/11/30 23:59:59    28        0         3
01     2013/10/1 00:00:01     2013/12/31 23:59:59    72        1         4
02     2013/10/1 00:00:01     2013/12/31 23:59:59   104        1         4
02     2013/10/1 00:00:01     2013/12/31 23:59:59    28        0         4
01     2013/1/1 00:00:01      2013/12/31 23:59:59    72        1         5     


02     2013/1/1 00:00:01      2013/12/31 23:59:59   104        1         5  
02     2013/1/1 00:00:01      2013/12/31 23:59:59    28        0         5
[解决办法]
这个最好有一张日期表(date,week_name,quater_name,month)
然后通过join来做group by
[解决办法]
你可以用先算出每一天属于第几周,然后再求,求每天所在的周数可以如下:
trunc((starttime-第一个starttime)/7)+1.

月,季,年都应该很好做,直接从STARTTIME中提取然后进行统计
[解决办法]
周:


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