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 <= floor((trunc(end_time, 'hh')-trunc(start_time, 'hh'))*24)+1
如果我有一个单一的时间行表,它会很好用。
有没有办法可以按 PatientName 或仅单独计算的每一行对结果进行分组?
解决方案
你真的很亲近。添加一个 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
推荐阅读
- sql - 使用子查询与变量作为过滤器
- powershell - 脚本频率
- php - PHP包含另一个文件,循环数组并为每条记录运行函数
- azerothcore - 我可以在 AzerothCore 上运行 LUA 脚本吗?
- javascript - 无法在 ejs 模板上显示 json 数据
- python - 如何结合两个语料库
- selenium - RobotFramework / Selenium Firefox:此事件不起作用?
- python - 从 Tkinter 中的组合框返回值
- python - pyqt5 mdiArea 显示小部件不显示内容
- r - 如何让 rateratio() 返回更多 p 值数字?