create table T_SJCJ_ZZKTJ 装置开停机表
(
ID NUMBER not null, 记录编号,自增字段
DW VARCHAR2(20) not null, 单位编码
SCXBM VARCHAR2(20), 生产线编码
KSSJ VARCHAR2(18), 开始时间
JSSJ VARCHAR2(18), 结束时间
ZT VARCHAR2(1) default '0' not null,状态:''1''表示开机;''0''表示停机
JYSM VARCHAR2(100), 停机原因简要说明
TJYY VARCHAR2(2) 停机原因
)
这是装置开停工表,记录装置的开始和停止的时间状态信息
我想做一个视图,显示每个生产线每天的开机时间和停机时间
视图的列应该有: 单位编码,生产线编码,日期,开机时间,停机时间
注:一个单位有多条生产线,开机状态和停机状态交替
(
ID NUMBER not null, 记录编号,自增字段
DW VARCHAR2(20) not null, 单位编码
SCXBM VARCHAR2(20), 生产线编码
KSSJ VARCHAR2(18), 开始时间
JSSJ VARCHAR2(18), 结束时间
ZT VARCHAR2(1) default '0' not null,状态:''1''表示开机;''0''表示停机
JYSM VARCHAR2(100), 停机原因简要说明
TJYY VARCHAR2(2) 停机原因
)
这是装置开停工表,记录装置的开始和停止的时间状态信息
我想做一个视图,显示每个生产线每天的开机时间和停机时间
视图的列应该有: 单位编码,生产线编码,日期,开机时间,停机时间
注:一个单位有多条生产线,开机状态和停机状态交替
(select dw,scxbm,sum(kssj-jssj) kaiji,null tingji from T_SJCJ_ZZKTJ
where zt = '1' group by dw,scxbm
union
select dw,scxbm,null kaiji,sum(kssj-jssj) tingji from T_SJCJ_ZZKTJ
where zt = '0' group by dw,scxbm)
group by dw,scxbm
举个例子:
ID(编号) DW(单位) SCXBM(生产线) KSSJ(开始时间) JSSJ(结束时间) ZT(状态)
1 单位1 单位1生产线1 2006-12-26 22:00 2006-12-27 08:00 0
2 单位1 单位1生产线1 2006-12-27 08:00 2006-12-27 17:00 1
3 单位1 单位1生产线1 2006-12-27 17:00 2006-12-27 23:00 0
4 单位1 单位1生产线1 2006-12-27 23:00 2006-12-28 09:00 1
结果
DW(单位) SCXBM(生产线) DATE(日期) KJSJ(开机时间) TJSJ(停机时间)
单位1 单位1生产线1 2006-12-27 600 840
注:1.编号为2的数据 17:00-08:00=540分钟 + 编号为4的数据 00:00-23:00=60分钟 总合为600
2.还有其它的单位和生产线.
这个可能要写在一个游标里,因为视图不提供GROUP BY 功能
from
(
select dw,scxbm,to_char(kssj,'yyyy-mm-dd') date, (kssj-jssj)*24*60 kaiji from T_SJCJ_ZZKTJ
where zt = '1' and to_char(kssj,'yyyy-mm-dd') = to_char(jssj,'yyyy-mm-dd')
union
select dw,scxbm,to_char(kssj,'yyyy-mm-dd') date, (to_date(to_char(kssj,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')-kssj)*24*60+1 kaiji from T_SJCJ_ZZKTJ
where zt = '1' and to_char(kssj,'yyyy-mm-dd') < to_char(jssj,'yyyy-mm-dd')
union
select dw,scxbm,to_char(jssj,'yyyy-mm-dd') date, (jssj-to_date(to_char(jssj,'yyyy-mm-dd')||' 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60 kaiji from T_SJCJ_ZZKTJ
where zt = '1' and to_char(kssj,'yyyy-mm-dd') < to_char(jssj,'yyyy-mm-dd')
) a
group by dw,scxbm,date