根据天来算周、月、季、年,求助!!!
已知 表
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
