表结构如下:
部门 时间
----------
部门1 时间1
部门1 时间2
部门1 时间3
部门1 时间4
部门2 时间5
部门2 时间6
部门2 时间7
部门2 时间8
部门3 时间9
部门3 时间10
部门3 时间11
部门3 时间12
部门1 时间13
部门1 时间14
部门1 时间15
部门1 时间16我要求出每个部门的时间之差。比如部门2的时间差是“时间8 - 时间5”,但是部门1的时间差有两个“时间16 - 时间13”;“时间4 - 时间1”。
跪谢!!!!!!!!!!
部门 时间
----------
部门1 时间1
部门1 时间2
部门1 时间3
部门1 时间4
部门2 时间5
部门2 时间6
部门2 时间7
部门2 时间8
部门3 时间9
部门3 时间10
部门3 时间11
部门3 时间12
部门1 时间13
部门1 时间14
部门1 时间15
部门1 时间16我要求出每个部门的时间之差。比如部门2的时间差是“时间8 - 时间5”,但是部门1的时间差有两个“时间16 - 时间13”;“时间4 - 时间1”。
跪谢!!!!!!!!!!
(t_name varchar2(10),
t_time date);insert into test
select '部门1',sysdate + 1/24 from dual;
insert into test
select '部门1',sysdate + 2/24 from dual;
insert into test
select '部门1',sysdate + 3/24 from dual;
insert into test
select '部门1',sysdate + 4/24 from dual;
insert into test
select '部门2',sysdate + 5/24 from dual;
insert into test
select '部门2',sysdate + 6/24 from dual;
insert into test
select '部门2',sysdate + 7/24 from dual;
insert into test
select '部门2',sysdate + 8/24 from dual;
insert into test
select '部门3',sysdate + 9/24 from dual;
insert into test
select '部门3',sysdate + 10/24 from dual;
insert into test
select '部门3',sysdate + 11/24 from dual;
insert into test
select '部门3',sysdate + 12/24 from dual;
insert into test
select '部门1',sysdate + 13/24 from dual;
insert into test
select '部门1',sysdate + 14/24 from dual;
insert into test
select '部门1',sysdate + 15/24 from dual;
insert into test
select '部门1',sysdate + 16/24 from dual;
commit;
select c_id,t_name,max(t_time) - min(t_time) from
(select c.id - rownum c_id,t_time,t_name from (select b.id ,b.t_name,b.t_time from
(select rownum id,a.* from test a order by a.t_time) b
order by t_name,id) c)
group by c_id,t_name
直接group by t_name只有一行部门1,我那个有两个部门1
result
1 -4 部门2 0.125
2 -4 部门3 0.125
3 0 部门1 0.125
4 8 部门1 0.125
这个应该是你要的
select c_id,t_name,max(t_time) from
(select c.id - rownum c_id,t_time,t_name from (select b.id ,b.t_name,b.t_time from
(select rownum id,a.* from test a order by a.t_time) b
order by t_name,id) c)
group by c_id,t_name
union
select c_id,t_name,min(t_time) from
(select c.id - rownum c_id,t_time,t_name from (select b.id ,b.t_name,b.t_time from
(select rownum id,a.* from test a order by a.t_time) b
order by t_name,id) c)
group by c_id,t_name