时间计算的问题

Crisitaaano 2014-12-09 03:33:37
我现在 Oracle数据库 中 有两张表 设备运转T1 , 设备异常表 T2 ,表结构相同。
T1 : id , createTime , endTime
T2 : id , createTime , endTime
createTime , endTime 的跨度最大是24小时。
例如
createTime endTime
2014-11-8 00:00 2014-11-9 00:00

2014-11-10 00:00 2014-11-11 00:00

2014-11-11 07:00 2014-11-12 00:00

2014-11-12 07:00 2014-11-12 22:00

想在想计算出设备的实际运行时间,就是 设备运转时间 减去 该时间内的设备异常时间
是用 数据库做好,还是用.net类来写方便?
用Oracle语句来计算如何计算?
用ASP.NET来写如何写?
...全文
183 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crisitaaano 2014-12-10
  • 打赏
  • 举报
回复
谢谢大神
bw555 2014-12-10
  • 打赏
  • 举报
回复
引用 10 楼 lanecy 的回复:
不是每天都到次日的零点,每天的结束时间是最迟最迟是到次日的零点
我问的就是是不是最晚到次日的0点啊,按你的描述9楼代码可用
Crisitaaano 2014-12-10
  • 打赏
  • 举报
回复
不是每天都到次日的零点,每天的结束时间是最迟最迟是到次日的零点
bw555 2014-12-10
  • 打赏
  • 举报
回复
你的endtime是不是最晚到次日的0点?如果是的话可以这样写
select id, trunc(createtime),sum(run_time)
from (
    select id, endtime-createtime run_time from t1
    union all
    select id, createtime-endtime run_time from t2 
)group by id,trunc(createtime)
Crisitaaano 2014-12-10
  • 打赏
  • 举报
回复
你看,我数据库中的每条记录,都可以认为是单天的运行时间
Crisitaaano 2014-12-10
  • 打赏
  • 举报
回复
你这边用的sum,是按照设备汇总的运行时间啊 我想计算,每个设备,每天 实际运行了多久
bw555 2014-12-09
  • 打赏
  • 举报
回复
作业题还是什么,这类需求最好在数据库中,执行效率比用类实现要快很多 再提供一种写法
select id, sum(run_time)
from (
    select id, endtime-createtime run_time from t1
    union all
    select id, createtime-endtime run_time from t2 
)group by id
Crisitaaano 2014-12-09
  • 打赏
  • 举报
回复
若是用程序写,类,大概怎么写,给个参考
Crisitaaano 2014-12-09
  • 打赏
  • 举报
回复
大致的数据是这样 TEST001 2014-12-01 08:00:00 2014-12-01 18:48:00 TEST002 2014-12-03 00:00:00 2014-12-04 00:00:00 TEST002 2014-12-02 07:00:00 2014-12-03 00:00:00 TEST002 2014-12-05 00:00:00 2014-12-05 07:30:00 TEST002 2014-12-04 00:00:00 2014-12-05 00:00:00 TEST003 2014-12-16 00:00:00 2014-12-17 00:00:00 TEST003 2014-12-17 00:00:00 2014-12-17 09:55:00 TEST003 2014-12-14 00:00:00 2014-12-15 00:00:00 TEST003 2014-12-13 00:00:00 2014-12-14 00:00:00 TEST003 2014-12-12 00:00:00 2014-12-13 00:00:00 TEST003 2014-12-11 00:00:00 2014-12-12 00:00:00 TEST003 2014-12-10 00:00:00 2014-12-11 00:00:00 TEST003 2014-12-09 00:00:00 2014-12-10 00:00:00 TEST003 2014-12-08 09:00:00 2014-12-09 00:00:00 TEST003 2014-12-15 00:00:00 2014-12-16 00:00:00 TEST004 2014-11-23 00:00:00 2014-11-24 00:00:00 TEST004 2014-11-22 00:00:00 2014-11-23 00:00:00 TEST004 2014-11-21 00:00:00 2014-11-22 00:00:00 TEST004 2014-11-20 09:00:00 2014-11-21 00:00:00
CT_LXL 2014-12-09
  • 打赏
  • 举报
回复
引用 2 楼 lanecy 的回复:
我的意思是计算出 每天每个设备 实际运行了多少小时, 你的语句是根据设备id来分组,计算的是,每个设备总的时间
如果需要统计每天的话,由于牵涉时间有跨天的问题(createtime 和endtime)不在同一天,一个SQL写起来比较麻烦,建议用程序实现
Crisitaaano 2014-12-09
  • 打赏
  • 举报
回复
我的意思是计算出 每天每个设备 实际运行了多少小时, 你的语句是根据设备id来分组,计算的是,每个设备总的时间
CT_LXL 2014-12-09
  • 打赏
  • 举报
回复
引用 楼主 lanecy 的回复:

select tt1.id, run_time - nvl(stop_time, 0)
  from (select id, sum(endtime - createtime) run_time from t1 group by id) tt1,
       (select id, sum(endtime - createtime) stop_time from t2 group by id) tt2
 where tt1.id = tt2.id(+)

17,089

社区成员

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

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