oracle sql,计算工作时间

oracle sql,计算工作时间,oracle,oracle11g,Oracle,Oracle11g,我一直在努力寻找相关的东西,但找不到。 我有一个问题,我需要生成某个东西的可用性百分比。我有一个表,其中包括正在发生的事件,我设法按事件发生的当天对其进行计数,但我发现了一些问题,可以计算一个季度或一年中的总工作时间 当一周中的每一天都有不同的体重时 基本上,我的问题是:我可以不做一个包含该月/年所有日期的表格就完成它吗 数据示例如下: ID DATE duration Environment 1 23/10/15 25 a 2

我一直在努力寻找相关的东西,但找不到。 我有一个问题,我需要生成某个东西的可用性百分比。我有一个表,其中包括正在发生的事件,我设法按事件发生的当天对其进行计数,但我发现了一些问题,可以计算一个季度或一年中的总工作时间

当一周中的每一天都有不同的体重时

基本上,我的问题是:我可以不做一个包含该月/年所有日期的表格就完成它吗

数据示例如下:

ID     DATE       duration   Environment
1     23/10/15       25          a
2     15/01/15       50          b
3     01/01/15       43          c
8     05/06/14       7           b

它可以通过计算字段或普通查询来获取信息。

对不起,我不太理解这个问题,但如果您想使用级别连接生成日期是一种简单的方法,您也可以使用model子句或递归,我在这里只做了10天,但您明白了。我把你们的日期放在t1中,生成了一个日期列表t,然后做了一个左外连接把它们放在一起

 WITH t AS
  (SELECT to_date('01-01-2015', 'mm-dd-yyyy') + level - 1 AS dt,
    NULL                                                  AS duration
  FROM dual
    CONNECT BY level < = 10
  ),
  t1 AS
  (
  SELECT to_date('10/01/15', 'dd-mm-yy') as dt, 50 as duration FROM dual
  UNION ALL
  SELECT to_date('01/01/15', 'dd-mm-yy'), 43 FROM dual
  UNION ALL
  SELECT to_date('06/01/15', 'dd-mm-yy'), 43 FROM dual
  )
SELECT t.dt,
  NVL(NVL(t1.duration, t.duration),0) duration
FROM t,
  t1
WHERE t.dt = t1.dt(+)
ORDER BY dt

这就是我的意图,下面是完整的答案

 WITH t AS
 (SELECT to_date('01-01-2015', 'mm-dd-yyyy') + level - 1 AS dt

 FROM dual
   CONNECT BY level < =365
 ),
t1  as
(

SELECT  dt, 
CASE
                    WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('MON', 'TUE', 'WED', 'THU', 'FRI'))
                                    THEN  14*60
                    WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('SAT'))
                                     THEN  8*60
                   WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('SUN'))
                              THEN  10*60
                    ELSE 0  END duration ,
to_char(t.dt,'Q') as quarter
FROM t
)                             
select  to_char(t1.dt,'yyyy'), to_char(t1.dt,'Q'),sum(t1.duration)
from t1
group by 
to_char(t1.dt,'yyyy'), to_char(t1.dt,'Q');          

当我有三组工作时间时,我想计算一个季度或一年的总工作时间。你给了我答案的第一部分,当我到第二部分时,我会把它贴出来。谢谢。
 WITH t AS
 (SELECT to_date('01-01-2015', 'mm-dd-yyyy') + level - 1 AS dt

 FROM dual
   CONNECT BY level < =365
 ),
t1  as
(

SELECT  dt, 
CASE
                    WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('MON', 'TUE', 'WED', 'THU', 'FRI'))
                                    THEN  14*60
                    WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('SAT'))
                                     THEN  8*60
                   WHEN (to_char(TO_DATE( t.dt,'YYYY-MM-DD HH24:MI:SS'),'DY') in ('SUN'))
                              THEN  10*60
                    ELSE 0  END duration ,
to_char(t.dt,'Q') as quarter
FROM t
)                             
select  to_char(t1.dt,'yyyy'), to_char(t1.dt,'Q'),sum(t1.duration)
from t1
group by 
to_char(t1.dt,'yyyy'), to_char(t1.dt,'Q');