我现在有一张表,建表语句如下
CREATE TABLE REPRECORD(
ID INT NOT NULL,
ASSIGNID INT NOT NULL,
CATE1NAME VARCHAR2(20) NOT NULL,
CATE2NAME VARCHAR2(20),
WORKERID VARCHAR2(20) NOT NULL,//工人ID
WORKERNAME VARCHAR2(20) NOT NULL,//工人姓名
CHARGEID VARCHAR2(20) NOT NULL,
ARRANGETIME DATE NOT NULL,//维修派出时间
FINISHTIME DATE,//维修完成时间
SCORE1 INT,
SCORE2 INT,
SCORE3 INT,
REPRESULTID VARCHAR2(20) NOT NULL,//维修状态,1为成功,2为失败
FREASON VARCHAR2(40),
PRIMARY KEY (ID),
FOREIGN KEY(ASSIGNID) REFERENCES REPREQUEST(ID),
FOREIGN KEY(WORKERID) REFERENCES USERS(DBUSER)
);我现在在写一条sql语句,包括以下几个内容:工人id,该工人维修完成工时,该工人维修成功个数,该工人维修失败个数,总个数。
完成时间减去派出时间就是这个工人维修一个成功的时间。工时的意思就是我一个工人维修成功的这些总时间加起来除以成功的个数。比如一个工人有5个任务,他有3个成功了,第一个耗费2小时,第二个耗费3小时,第三个耗费4小时,他的平均工时就是(2+3+4)/3.这个工人对应的一条表数据就是工人id(假设为001),(2+3+4)/3,3,2,5。我就是不会算这个平均工时,数据库里arrangetime与finishtime都是精确到秒的,比如说2012-01-01 14:12:11.但我算的时候想让时间精确到小时就够了。求助一下各位,能不能帮我看看这个。万分感谢
CREATE TABLE REPRECORD(
ID INT NOT NULL,
ASSIGNID INT NOT NULL,
CATE1NAME VARCHAR2(20) NOT NULL,
CATE2NAME VARCHAR2(20),
WORKERID VARCHAR2(20) NOT NULL,//工人ID
WORKERNAME VARCHAR2(20) NOT NULL,//工人姓名
CHARGEID VARCHAR2(20) NOT NULL,
ARRANGETIME DATE NOT NULL,//维修派出时间
FINISHTIME DATE,//维修完成时间
SCORE1 INT,
SCORE2 INT,
SCORE3 INT,
REPRESULTID VARCHAR2(20) NOT NULL,//维修状态,1为成功,2为失败
FREASON VARCHAR2(40),
PRIMARY KEY (ID),
FOREIGN KEY(ASSIGNID) REFERENCES REPREQUEST(ID),
FOREIGN KEY(WORKERID) REFERENCES USERS(DBUSER)
);我现在在写一条sql语句,包括以下几个内容:工人id,该工人维修完成工时,该工人维修成功个数,该工人维修失败个数,总个数。
完成时间减去派出时间就是这个工人维修一个成功的时间。工时的意思就是我一个工人维修成功的这些总时间加起来除以成功的个数。比如一个工人有5个任务,他有3个成功了,第一个耗费2小时,第二个耗费3小时,第三个耗费4小时,他的平均工时就是(2+3+4)/3.这个工人对应的一条表数据就是工人id(假设为001),(2+3+4)/3,3,2,5。我就是不会算这个平均工时,数据库里arrangetime与finishtime都是精确到秒的,比如说2012-01-01 14:12:11.但我算的时候想让时间精确到小时就够了。求助一下各位,能不能帮我看看这个。万分感谢
解决方案 »
- db link中的 dblink_authentication
- 关于oracle11g R2的 OS认证(在线等待,100分)
- parallel 的数值参数怎么设置?
- 如何获取某个指定表空间的历史增长记录
- VB.net能连接ORACLE;ASP.net却不能连接ORACLE。这是怎么回事????
- 请教:不装oracle客户端,为何连不上,急!
- oracel简单统计问题,统计今年数据和去年同期数据
- 请教高手:经典查询问题!!!在线等待。。。。。。
- 高分请教: oracle 启动协议适配器出错问题,在线等待 ......(分数不够可再加,csdn怎么不让给高分)
- FORALL 不能接DBMS_OUTPUT.put_line(i); ??
- 查询出身份证号码中是12月份生日的员工总数
- 用PLSQL连接服务器,是不是要先在本地先开启oracle的服务?
这个是精确到小时的
select succ_sub.WORKERID "工人id",
succ_sub.succ_cnt "维修成功个数",
succ_sub.averagetime "维修完成工时",
nvl(fail_sub.fail_cnt, 0) "维修失败个数",
(succ_sub.succ_cnt+nvl(fail_sub.fail_cnt, 0)) "总个数"
from
(select succ_sub.WORKERID WORKERID, count(1) succ_cnt, sum(succ_sub.workhours)/count(1) averagetime
from
(select WORKERID, WORKERNAME, round((FINISHTIME-ARRANGETIME)*24) workhours from test_a
where REPRESULTID = '1') succ_sub
group by succ_sub.WORKERID
) succ_sub,
(select WORKERID, count(1) fail_cnt from test_a where REPRESULTID = '2' group by WORKERID) fail_sub
where succ_sub.WORKERID = fail_sub.WORKERID(+)
sum(decode(t.represultid, 1, 1, 2, 0)) as a,
sum(decode(t.represultid, 1, 0, 2, 1)) as b,
sum(decode(t.represultid,
1,
(trunc(t.finishtime) - trunc(t.arrangetime)),
2,
0)) / nvl(sum(decode(t.represultid, 1, 1, 2, 0)), 1) as c
from reprecord t
group by t.workerid