Sql Oracle,将一个时间段拆分为多行一小时

Sql Oracle,将一个时间段拆分为多行一小时,sql,oracle,Sql,Oracle,我知道这个问题在这里得到了回答: 但是,如果您有多个这样的时间段呢: 我有以下疑问: select AdmitDate, PatientName, Room, greatest(start_time, trunc(start_time+(level-1)/24, 'hh24')) beginTime, least(end_time, trunc(start_time+(level)/24, 'hh24')) endTime from Utilization connect by level

我知道这个问题在这里得到了回答:

但是,如果您有多个这样的时间段呢:

我有以下疑问:

select AdmitDate, PatientName, Room, greatest(start_time, trunc(start_time+(level-1)/24, 'hh24')) beginTime, least(end_time, trunc(start_time+(level)/24, 'hh24')) endTime
from Utilization
connect by level <= floor((trunc(end_time, 'hh')-trunc(start_time, 'hh'))*24)+1 
选择入院日期、患者姓名、房间、最大(开始时间、trunc(开始时间+(级别1)/24,'hh24'))开始时间、最小(结束时间、trunc(开始时间+(级别)/24,'hh24'))结束时间
利用

按级别连接你真的非常接近。添加一个DISTINCT和一个ORDER BY,我认为您已经得到了您想要的结果:

SELECT DISTINCT AdmitDate,
                PatientName,
                Room,
                greatest(start_time, trunc(start_time+(level-1)/24, 'hh24')) beginTime,
                least(end_time, trunc(start_time+(level)/24, 'hh24')) endTime
  from Utilization
  connect by level <= floor((trunc(end_time, 'hh')-trunc(start_time, 'hh'))*24)+1
  ORDER BY 1, 2, 3, 4, 5

ADMITDATE               PATIENTNAME ROOM BEGINTIME              ENDTIME
2012-01-24 00:00:00     Patient1    RM1  2012-01-24 07:30:00    2012-01-24 08:00:00
2012-01-24 00:00:00     Patient1    RM1  2012-01-24 08:00:00    2012-01-24 08:32:00
2012-01-24 00:00:00     Patient2    RM1  2012-01-24 08:45:00    2012-01-24 09:00:00
2012-01-24 00:00:00     Patient2    RM1  2012-01-24 09:00:00    2012-01-24 09:13:00