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

SQL如何在两次之间将一行拆分为多行?,sql,oracle,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

我有一排像:

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行:

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&connectby-level创建查询


查询还说明了超时时间不在15分钟内。

您还需要说明您是如何尝试的?更新了帖子。我不确定我是否理解您对分钟的期望。您说分钟数将以15分钟为增量增加,但您的示例并未显示每15分钟后TimeID将增加,而不是分钟。您的解决方案仅适用于1行,正如您所提到的。你能帮我把这项工作做好吗。我尝试了几个连接方式的场景,但没有成功。更新了两行示例的post。