oracle时间累积合并计算

nbtom007 2015-01-13 01:15:01
请教一个问题:
如果我通过sql查询能检索出来多条时间段,我怎么快速计算出来时间。
举例:
我的检索结果:
2014-9-1 10:00 2014-9-2 11:30
2014-9-1 10:30 2014-9-2 11:00

2014-9-3 11:00 2014-9-4 12:00

由于第二段时间包含在第一段时间之内,所以程序要检测出来,同时只用第一段时间的和+第三段时间的和(第三段时间是独立的)]
...全文
731 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
doingendlessly 2015-01-20
  • 打赏
  • 举报
回复
引用 9 楼 zujinsheng 的回复:
擦, bw555版主, 你眼睛能不能不眨? 还能不能愉快的看评论了..
同问啊,每次看帖子的时候都要被女儿夺去电脑,只因为她要看版主眨眼睛~~
bw555 2015-01-15
  • 打赏
  • 举报
回复
引用 9 楼 zujinsheng 的回复:
擦, bw555版主, 你眼睛能不能不眨? 还能不能愉快的看评论了..
zujinsheng 2015-01-14
  • 打赏
  • 举报
回复
擦, bw555版主, 你眼睛能不能不眨? 还能不能愉快的看评论了..
nbtom007 2015-01-14
  • 打赏
  • 举报
回复
我感觉解决不了这个问题,你有qq吗?
bw555 2015-01-13
  • 打赏
  • 举报
回复
看明细,把sum去掉就行了
WITH T1 AS(
select connect_by_root(s) S,E
from t T1
connect by prior s<=s and prior e>=s AND PRIOR ID<>ID
start with not exists(select 1 from T WHERE S<=T1.s and E>=T1.S AND ID<>T1.ID)
)
SELECT S,MAX(E) AS E
FROM T1
GROUP BY S
nbtom007 2015-01-13
  • 打赏
  • 举报
回复
感谢,我想看下明细的记录,我的表名是SHIP_BERTH,不要给我汇总的结果
bw555 2015-01-13
  • 打赏
  • 举报
回复
not exists(select 1 from T WHERE S<=T1.s and E>=T1.S AND ID<>T1.ID) 这个条件 就是说,当前记录的起始时间不属于任何其他记录代表的时间段
nbtom007 2015-01-13
  • 打赏
  • 举报
回复
T WHERE S<=T1.s and E>=T 这个什么意思啊
bw555 2015-01-13
  • 打赏
  • 举报
回复
假设你的表名为T,起始时间S,结束时间E,关键字为ID 以下语句已考虑时间段交叉的情况
WITH T1 AS(
select connect_by_root(s) S,E
from t T1
connect by prior s<=s and prior e>=s AND PRIOR ID<>ID
start with not exists(select 1 from T WHERE S<=T1.s and E>=T1.S AND ID<>T1.ID)
)
SELECT SUM(MAX(E)-S)
FROM T1
GROUP BY S
nbtom007 2015-01-13
  • 打赏
  • 举报
回复
是的,就是这种,有办法解决吗?
bw555 2015-01-13
  • 打赏
  • 举报
回复
只是这种包含关系吗?是否存在交叉的现象 如一个时间点为10点到11点,另一个时间段为10点半到11点半,两个时间段有半小时是重叠的

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧