sql - 如何在 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);
这是预期的输出:
解决方案
您可以使用 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;
推荐阅读
- wordpress - 使用 nginx 安装 codeigniter 和 wordpress 但博客内部 URL 不起作用
- c# - ASPNet Core:使用 [Authorize] with function in service
- corda - 在 R3 Corda 中我不知道启动 Web 服务器端口?
- groovy - 全局变量 - Katalon Studio
- python - 如何从张量流中的检查点恢复复杂对象,以通过恢复检查点预测新数据
- spring - liquibase 没有为 Spring Boot 更新数据库中的新数据
- mysql - 想在 ssis 中连接 oledb 和 mysql
- rest - 从表单中获取信息以调用 api
- angular - 如何隐藏角度 4/6 剑道网格数字过滤器增加减少图标?(纺纱机)
- php - 来自 onclick 输入的 PHP 值