首页 > 解决方案 > 如何在 Oracle SQL 中将持续时间拆分为每小时间隔?

问题描述

我在表中有一个用户登录和注销时间的输入表,我需要将输出拆分为每小时间隔。

提前感谢您的任何帮助

这是创建表的片段:

CREATE TABLE table_name (
    userid varchar(255),
    date_capture DATE,
    login_hour int,
    logout_hour int
);

这是测试数据:

INSERT INTO table_name(userid,date_capture,login_hour,logout_hour)  
       VALUES  ('Test1', '02-JUN-2020',6,9);
INSERT INTO table_name  (userid,date_capture,login_hour,logout_hour)
       VALUES  ('Test2', '02-JUN-2020',3,4);

这是预期的输出:

在此处输入图像描述

标签: sqloracle

解决方案


您可以使用 cte 递归地添加一个小时,直到达到目标:

with cte(userid,date_capture,login_hour,logout_hour,target) as (
      select userid, 
             date_capture, 
             login_hour, 
             login_hour + 1, 
             logout_hour
      from   table_name
      union all
      select userid, 
             date_capture, 
             logout_hour, 
             logout_hour + 1, 
             target
      from   cte
      where  logout_hour + 1 <= target
)
select   userid, 
         date_capture, 
         login_hour, 
         logout_hour
from     cte
order by userid,
         date_capture, 
         login_hour;

推荐阅读