数据如图,现在有个需求是如下:
首先我根据业务号:800120091026614查询出的数据如图,这是一个整个业务流程的过程,FROM_STS字段是某一个业务的开始节点,用数字表示的,TO_STS是某个业务的结束节点,DEAL_TIME是处理的时间,这个表的主键是ID。
现在要实现的效果是某一个流程处理完后的时效,时效是用DEAL_TIME字段进行相减来得到的,算到天就行。
比如:81209的结束节点对应的开始节点为FROM_STS字段中对应的81209字段,但是很有意思的是对应的这开始节点中的81209有4个,从肉眼上看是取数据为第二条的那个81209的时间-第一条中结束节点为81209的时间,但是数据库中怎么让结束节点找到对应的开始节点(两个时间点最近的肯定是对的),并且怎么让数据库只减一次,比如81209对应的开始节点有4个,我怎么减我那个最近的开始节点的时间。
想了好久了,求大侠帮忙。
select b.*,TRUNC(B.Deal_Time, 'dd') - trunc(A.Deal_Time, 'dd')
from TMS_BUSI_FLOW_STS_LOG A, TMS_BUSI_FLOW_STS_LOG B
where A.APPLY_ID = B.Apply_Id
and A.To_Sts = B.From_Sts
and A.apply_id = '800120091026614'
这是我写的sql,但是遇到结束节点对应多个开始节点的时候就有问题了。我这个sql是一个一个减的,所以遇到像81209就会减4次,并且这4次中我不知道我要哪一次。求教oracle的困惑
首先我根据业务号:800120091026614查询出的数据如图,这是一个整个业务流程的过程,FROM_STS字段是某一个业务的开始节点,用数字表示的,TO_STS是某个业务的结束节点,DEAL_TIME是处理的时间,这个表的主键是ID。
现在要实现的效果是某一个流程处理完后的时效,时效是用DEAL_TIME字段进行相减来得到的,算到天就行。
比如:81209的结束节点对应的开始节点为FROM_STS字段中对应的81209字段,但是很有意思的是对应的这开始节点中的81209有4个,从肉眼上看是取数据为第二条的那个81209的时间-第一条中结束节点为81209的时间,但是数据库中怎么让结束节点找到对应的开始节点(两个时间点最近的肯定是对的),并且怎么让数据库只减一次,比如81209对应的开始节点有4个,我怎么减我那个最近的开始节点的时间。
想了好久了,求大侠帮忙。
select b.*,TRUNC(B.Deal_Time, 'dd') - trunc(A.Deal_Time, 'dd')
from TMS_BUSI_FLOW_STS_LOG A, TMS_BUSI_FLOW_STS_LOG B
where A.APPLY_ID = B.Apply_Id
and A.To_Sts = B.From_Sts
and A.apply_id = '800120091026614'
这是我写的sql,但是遇到结束节点对应多个开始节点的时候就有问题了。我这个sql是一个一个减的,所以遇到像81209就会减4次,并且这4次中我不知道我要哪一次。求教oracle的困惑
解决方案 »
- oracle如何填充(insert into)嵌套表(nested table)?
- sqlldr语句用法
- 求救数据库当掉恢复
- 我想问一下oracle删除问题,非常郁闷!~~~
- (急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急)
- windows xp 中 如何安装microsoft odbc for oracle(zj2973230)(急)
- !!!权限怪现象!!!!
- Oracle9i数据库连接问题??
- 求SQL語句(Oracle),挑戰!
- 连接数据库时发生这样的错误是因为什么?
- Oralce在引用java代码时出现symbol : variable Base64 问题
- 安装Oracle11g 64bit关于lib32包的问题。求教
你弄个模拟测试数据出来下,这样才好玩下。。
(
APPLY_ID VARCHAR2(40),
FROM_STS NUMBER(10) not null,
TO_STS NUMBER(10) not null,
DEAL_DESC VARCHAR2(4000),
OPER_ID NUMBER(10),
DEAL_TIME DATE,
ID NUMBER(10) not null,
COLLECT_BILL_DATE DATE
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table TMS_BUSI_FLOW_STS_LOG
is '业务状态变更明细表';
-- Add comments to the columns
comment on column TMS_BUSI_FLOW_STS_LOG.APPLY_ID
is '申请编码';
comment on column TMS_BUSI_FLOW_STS_LOG.FROM_STS
is '变更前状态';
comment on column TMS_BUSI_FLOW_STS_LOG.TO_STS
is '变更后状态';
comment on column TMS_BUSI_FLOW_STS_LOG.DEAL_DESC
is '受理说明';
comment on column TMS_BUSI_FLOW_STS_LOG.OPER_ID
is '受理人';
comment on column TMS_BUSI_FLOW_STS_LOG.DEAL_TIME
is '受理时间';
comment on column TMS_BUSI_FLOW_STS_LOG.ID
is '记录ID';
comment on column TMS_BUSI_FLOW_STS_LOG.COLLECT_BILL_DATE
is '签单日期';
insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81208, 81209, '用户登录机器IP地址:10.17.9.116,访问功能为:/sub.contract.busi.sts.change', 115881, to_date('26-10-2009 18:07:24', 'dd-mm-yyyy hh24:mi:ss'), 27406, null);insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81209, 81208, '<br>用户登录机器IP地址:10.46.10.16,访问功能为:/baseinfo.approve', 154766, to_date('27-10-2009 09:25:05', 'dd-mm-yyyy hh24:mi:ss'), 27410, to_date('27-10-2009', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81208, 81209, '用户登录机器IP地址:10.17.9.116,访问功能为:/sub.contract.busi.sts.change', 115881, to_date('27-10-2009 09:38:31', 'dd-mm-yyyy hh24:mi:ss'), 27412, null);insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81209, 81219, '<br>用户登录机器IP地址:10.46.10.16,访问功能为:/baseinfo.approve', 154766, to_date('27-10-2009 09:42:55', 'dd-mm-yyyy hh24:mi:ss'), 27414, to_date('27-10-2009', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81219, 81229, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/contract.print', 362614, to_date('16-08-2011 16:37:56', 'dd-mm-yyyy hh24:mi:ss'), 138692, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81229, 81220, '用户登录机器IP地址:10.9.19.117,访问功能为:/sub.contract.busi.sts.change', 362614, to_date('16-08-2011 16:40:04', 'dd-mm-yyyy hh24:mi:ss'), 138699, null);insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81331, 81225, '<br>用户登录机器IP地址:10.9.19.117,访问功能为:/contract.intput.upload.submit', 362614, to_date('16-08-2011 17:00:33', 'dd-mm-yyyy hh24:mi:ss'), 138746, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81225, 81226, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/generate.contract.record.confirm', 362614, to_date('16-08-2011 17:01:24', 'dd-mm-yyyy hh24:mi:ss'), 138751, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81226, 81227, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/contract.record.letter.submit', 362614, to_date('16-08-2011 17:01:35', 'dd-mm-yyyy hh24:mi:ss'), 138752, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81222, 81331, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/contract.print', 362614, to_date('16-08-2011 16:53:54', 'dd-mm-yyyy hh24:mi:ss'), 138731, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81209, 81219, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/baseinfo.approve', 362614, to_date('16-08-2011 16:20:03', 'dd-mm-yyyy hh24:mi:ss'), 138666, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81209, 81208, '1、其他:账户管理费支付周期。<br>用户登录机器IP地址:10.9.19.119,访问功能为:/baseinfo.approve', 362614, to_date('16-08-2011 16:18:13', 'dd-mm-yyyy hh24:mi:ss'), 138658, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81208, 81209, '用户登录机器IP地址:10.9.19.117,访问功能为:/sub.contract.busi.sts.change', 362614, to_date('16-08-2011 16:18:56', 'dd-mm-yyyy hh24:mi:ss'), 138660, null);insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81208, 81209, '用户登录机器IP地址:10.9.19.117,访问功能为:/sub.contract.busi.sts.change', 362614, to_date('16-08-2011 16:12:14', 'dd-mm-yyyy hh24:mi:ss'), 138653, null);insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81220, 81222, '<br>用户登录机器IP地址:10.9.19.119,访问功能为:/baseinfo.approve', 362614, to_date('16-08-2011 16:41:53', 'dd-mm-yyyy hh24:mi:ss'), 138705, to_date('16-08-2011', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81228, 9999, '<br>用户登录机器IP地址:127.0.0.1,访问功能为:/contract.effective.submit', 1, to_date('13-03-2012 16:08:12', 'dd-mm-yyyy hh24:mi:ss'), 147519, to_date('13-03-2012', 'dd-mm-yyyy'));insert into tms_busi_flow_sts_log (APPLY_ID, FROM_STS, TO_STS, DEAL_DESC, OPER_ID, DEAL_TIME, ID, COLLECT_BILL_DATE)
values ('800120091026614', 81227, 81228, '<br>用户登录机器IP地址:10.50.7.219,访问功能为:/planconfirmation.upload', 1, to_date('14-02-2012 13:42:28', 'dd-mm-yyyy hh24:mi:ss'), 143557, to_date('14-02-2012', 'dd-mm-yyyy'));测试数据,供大家用的,谢谢
select b.*, B.Deal_Time-A.DealTime timeRange
from TMS_BUSI_FLOW_STS_LOG A, TMS_BUSI_FLOW_STS_LOG B
where A.APPLY_ID = B.Apply_Id
and A.To_Sts = B.From_Sts
and A.apply_id = '800120091026614'
and B.Deal_Time>A.Deal_Time
and order by (B.Deal_Time-A.DealTime)
) t where rownum=1不过我觉得这样还是不对,你这要是中间某个人老长时间没有处理发出的那条申请,这个时间差反而很大,你这样算的话不就错了么
select b.*, B.Deal_Time-A.DealTime timeRange
from TMS_BUSI_FLOW_STS_LOG A, TMS_BUSI_FLOW_STS_LOG B
where A.APPLY_ID = B.Apply_Id
and A.To_Sts = B.From_Sts
and A.apply_id = '800120091026614'
and B.Deal_Time>A.Deal_Time
order by (B.Deal_Time-A.DealTime)
) t where rownum=1
drop table xx;
--2、创建数据表
create table xx( apply_id varchar2(40) ,id1 number(10),deal_time1 date,id2 number(10),deal_time2 date,cost_time float) ;
--3、向数据表中插入数据
insert into xx
(select y.apply_id, y.id, y.deal_time, '', '', ''
from tms_busi_flow_sts_log y
where y.id in
(select tl.id
from tms_busi_flow_sts_log tl
where tl.apply_id ='800120091026614'
));
--4、查询插入数据
select * from xx;
--5、
update xx set xx.id2=(select max(c.id) from tms_busi_flow_sts_log c where c.apply_id=xx.apply_id and c.id<xx.id1);
--6、
select * from xx order by xx.deal_time1;
--7、
update xx set xx.deal_time2=(select deal_time from tms_busi_flow_sts_log e where e.apply_id=xx.apply_id and e.id=xx.id2);
--8、
update xx set xx.deal_time2=(select h.fcd from tms_busi_apply h where h.apply_id=xx.apply_id) where xx.id2 is null;
--9、
update xx set xx.cost_time=xx.deal_time1-xx.deal_time2;
--10、
select * from xx order by xx.deal_time1;
select count(*) from xx order by xx.deal_time1;