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');