问题描述
我想根据休息时间超过1小时来使卡车退出
就像下面的eg
卡车出口
T1下午10:00
T2下午10:05
T3下午12:00
T4下午12:05
T5下午12:10
T6下午12:20
结果应该像 ......离开休息超过1小时的差距
10:00 10:05 1
12:00 12:20 2
就像下面的eg
卡车出口
T1下午10:00
T2下午10:05
T3下午12:00
T4下午12:05
T5下午12:10
T6下午12:20
结果应该像 ......离开休息超过1小时的差距
10:00 10:05 1
12:00 12:20 2
专家解答
我无法使您的实时SQL链接正常工作-您可以检查一下吗?
另外,不清楚超过1小时的休息意味着什么:
* 距离上次出口时间1小时?
* 自小组第一次退出时间起1小时?
无论哪种方式,从12c这是简单使用的模式匹配!
我假设你是说距离上次出口1小时。在这种情况下,您希望将所有行分组在一起,其中:
当前退出时间 <上一个退出时间1小时
我们可以将其定义为模式变量:
如果您想要自组中第一次退出以来的时间,请更改prev -> first。
这个组中可以有任意数量的行。所以你想搜索任何行,后跟零或更多with_hour行:
给予:
我看到你在11g上,所以这不会起作用 :( 还有其他各种方法可以解决这个问题,比如使用递归:
另外,不清楚超过1小时的休息意味着什么:
* 距离上次出口时间1小时?
* 自小组第一次退出时间起1小时?
无论哪种方式,从12c这是简单使用的模式匹配!
我假设你是说距离上次出口1小时。在这种情况下,您希望将所有行分组在一起,其中:
当前退出时间 <上一个退出时间1小时
我们可以将其定义为模式变量:
within_hour as exit_time < prev ( exit_time ) + 1/24复制
如果您想要自组中第一次退出以来的时间,请更改prev -> first。
这个组中可以有任意数量的行。所以你想搜索任何行,后跟零或更多with_hour行:
pattern ( init within_hour* )复制
给予:
create table t ( truck varchar2(2), exit_time date ); insert into t values ( 'T1', to_date ( '2020-08-11 10:00 AM', 'yyyy-mm-dd hh:mi am' ) ); insert into t values ( 'T2', to_date ( '2020-08-11 10:05 AM', 'yyyy-mm-dd hh:mi am' ) ); insert into t values ( 'T3', to_date ( '2020-08-11 12:00 PM', 'yyyy-mm-dd hh:mi am' ) ); insert into t values ( 'T4', to_date ( '2020-08-11 12:05 PM', 'yyyy-mm-dd hh:mi am' ) ); insert into t values ( 'T5', to_date ( '2020-08-11 12:10 PM', 'yyyy-mm-dd hh:mi am' ) ); insert into t values ( 'T6', to_date ( '2020-08-11 12:20 PM', 'yyyy-mm-dd hh:mi am' ) ); commit; select * from t match_recognize ( order by exit_time measures first ( exit_time ) as start_time, last ( exit_time ) as end_time, match_number() as grp pattern ( init within_hour* ) define within_hour as exit_time < prev ( exit_time ) + 1/24 ); START_TIME END_TIME GRP 11-AUG-2020 10:00:00 11-AUG-2020 10:05:00 1 11-AUG-2020 12:00:00 11-AUG-2020 12:20:00 2复制
我看到你在11g上,所以这不会起作用 :( 还有其他各种方法可以解决这个问题,比如使用递归:
with rws as ( select t.*, row_number () over ( order by exit_time ) rn from t ), grps ( exit_time, start_time, end_time, rn, grp ) as ( select exit_time, exit_time, exit_time, rn, 1 from rws where rn = 1 union all select r.exit_time, case when r.exit_time > g.end_time + 1/24 then r.exit_time else g.start_time end, r.exit_time, r.rn, case when r.exit_time > g.end_time + 1/24 then grp + 1 else grp end from grps g join rws r on g.rn + 1 = r.rn ) select start_time, max ( end_time ), grp from grps group by grp, start_time order by grp; START_TIME MAX(END_TIME) GRP 11-AUG-2020 10:00:00 11-AUG-2020 10:05:00 1 11-AUG-2020 12:00:00 11-AUG-2020 12:20:00 2复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
779次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
659次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
585次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
541次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
527次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
509次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
490次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
464次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
382次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
380次阅读
2025-05-05 19:28:36