请求查询

时间:2012-08-07 09:28:40

标签: sql-server-2008

Create table #job(id int,start_time datetime,end_time datetime)

insert into #job values(1,'2012-08-06 11:30:00.000','2012-08-06 15:30:00.000')
insert into #job values(1,'2012-08-06 15:30:00.000','2012-08-06 16:30:00.000')
insert into #job values(2,'2012-08-06 16:30:00.000','2012-08-06 17:30:00.000')
insert into #job values(1,'2012-08-06 17:30:00.000','2012-08-06 18:30:00.000')

我需要如下数据,我只需要有id = 1

答案应该如下。

1 '2012-08-06 11:30:00.000' '2012-08-06 16:30:00.000'
1 '2012-08-06 17:30:00.000'  '2012-08-06 18:30:00.000' 

1 个答案:

答案 0 :(得分:0)

试试这个:

select j1.id,min(j1.start_time) start_time,max(j2.end_time) end_time  from #job j1 inner join #job j2
on j1.id=j2.id and j1.end_time = j2.start_time 
group by j1.id

union

select * from #job where start_time not in(

select start_time  from #job where start_time in(
select j1.start_time from #job j1 inner join #job j2
on j1.id=j2.id and j1.end_time = j2.start_time and j1.id=1)

union all

select start_time from #job where start_time in(
select j1.end_time from #job j1 inner join #job j2
on j1.id=j2.id and j1.end_time = j2.start_time and j1.id=1)
) 

and id=1