问题如下:
有一张表,在表中有一个字段,Online字段,0表示不在线,1表示在线,设备在运行过程中进行统计它的在线时间,这个在线可能是不连续的,例如:在线时间1:2011-01-09到02-12在线,在线时间2:2011-03-21到05-03在线,可能中间有间隔,如何统计总得在线时间?
有一张表,在表中有一个字段,Online字段,0表示不在线,1表示在线,设备在运行过程中进行统计它的在线时间,这个在线可能是不连续的,例如:在线时间1:2011-01-09到02-12在线,在线时间2:2011-03-21到05-03在线,可能中间有间隔,如何统计总得在线时间?
解决方案 »
- 大家帮忙看一下 oracle 存储过程 update 执行不成功
- oracle中如果index被损坏这样恢复
- 求一条UPDATE 语句!
- PL/sql 下执行SQL的问题
- 【求助】请教下,什么是RAC节点?
- 请问怎么更新这样的记录?
- 在同一计算机上有两个库a,b,用户分别是ua,ub,当连接到库a中时,如何关联库b中的表?sql语句如何写?
- 失业了,散分!
- 求关于库存管理的资料
- 为啥报错PLS-00905: 对象 HUARUI2016.PROCUSERATTENDANCE 无效
- oracle客户端连接服务器正常,查询超时
- fedora系统,用root或oracle能成功登录oralce,普通用户就不行
PkID INTEGER not null,
DeviceID INTEGER default 0 not null,
ParameterID VARCHAR2(255) not null,
AlarmLevel INTEGER default NULL,
AlarmStatus INTEGER default NULL,
AlarmTime TIMESTAMP default SYSDATE not null,
AlarmReason VARCHAR2(255) default NULL,
AlarmValue FLOAT default 0 not null,
AlarmConditions VARCHAR2(255) default NULL,
LowerThreshold FLOAT,
UpperThreshold FLOAT,
Online integer,
ALARMRELIEVETIME date,
ALARMRELIEVEMODE integer,
constraint PK_DEVICEALARMINFO primary key ("PkID")
)数据表如上所示
create table DeviceAlarmInfo (
PkID INTEGER not null,
DeviceID INTEGER default 0 not null, --设备编号
ParameterID VARCHAR2(255) not null, --设备参数编号
AlarmLevel INTEGER default NULL, --告警等级
AlarmStatus INTEGER default NULL, --告警状态
AlarmTime TIMESTAMP default SYSDATE not null, --告警时间
AlarmReason VARCHAR2(255) default NULL,
AlarmValue FLOAT default 0 not null, --告警值
AlarmConditions VARCHAR2(255) default NULL,
LowerThreshold FLOAT, --最小阀值
UpperThreshold FLOAT, --最大阀值
Online integer, --在线状态
ALARMRELIEVETIME date, --解除时间
ALARMRELIEVEMODE integer, --解除方式
constraint PK_DEVICEALARMINFO primary key ("PkID")
)Online为在线状态
select t.PkID,sum(t.time)
(select PkID ,
DeviceID,
ParameterID ,
AlarmLevel,
AlarmStatus,
AlarmTime,
AlarmReason,
AlarmValue
AlarmConditions,
LowerThreshold,
UpperThreshold,
Online integer,
ALARMRELIEVETIME,
ALARMRELIEVEMODE,
ALARMRELIEVETIME-AlarmTime
from DeviceAlarmInfo) t
group by PkID;
--上面有点错,先把每条记录的在线时间time计算出来,然后同种机器group一下,sum(time)就是总的在线时间
select t.PkID,sum(t.time)
(select PkID ,
DeviceID,
ParameterID ,
AlarmLevel,
AlarmStatus,
AlarmTime,
AlarmReason,
AlarmValue
AlarmConditions,
LowerThreshold,
UpperThreshold,
Online,
ALARMRELIEVETIME,
ALARMRELIEVEMODE,
nvl(ALARMRELIEVETIME,sysdate)-AlarmTime time
from DeviceAlarmInfo) t
group by PkID;