SQL如何在两次之间将一行拆分为多个?

时间:2017-12-22 11:43:04

标签: sql oracle

我有一行像:

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;

1 个答案:

答案 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。