我有一行像:
EMPID INTIME OUTTIME JOBCODE
1 4:00 5:00 ABC
2 5:00 8:00 ABC
预期产出:
EMPID TIMEID JOBCODE MINUTE
1 16 ABC 15
1 17 ABC 15
1 18 ABC 15
1 19 ABC 15
4:00的TIMEID为16,并以15分钟的阈值增加。
我尝试使用以下查询,但它会生成一行。
SELECT
TO_NUMBER(SUBSTR(TO_CHAR(INTIME,'HH24:MI:SS'),0,2)* 4) + ROUND(TO_NUMBER((SUBSTR(TO_CHAR(INTIME,'HH24:MI:SS'),4,2)))/15,0) AS TIMEID,
EMPID,
JOBCODE,
MINUTE FROM MYTABLE;
答案 0 :(得分:0)
如下所示拆分1行:
with
x as
(select 1 Empid, to_date('01-JAN-1900 '||'4:00','DD-MON-YYYY HH24:MI') intime, to_date('01-JAN-1900 '||'5:12','DD-MON-YYYY HH24:MI') outtime from dual)
Select Empid,intime,(newtime-nvl(lag(newtime) over (order by newtime),intime))*1440 Required_Intervals,outtime,newtime
from (
select EmpId,InTime,Case When Outtime > INTIME+(15*rownum/1440) Then INTIME+(15*rownum/1440) Else Outtime End newTime,OUTTIME
from x
connect by rownum <= CEIL(((outtime-intime)*1440)/15))
1440 = 24(每天小时)* 60(每小时分钟数)=每天总分钟数
请注意它只适用于1行。对于多行,您也可以使用multiset&amp; amp;创建查询。如果需要,按级别连接。
查询还会考虑输出时间间隔是否为15。