请问关于数据库班次计划查询的有关问题

请教关于数据库班次计划查询的问题
现在数据库中有一张班次计划表

ID    时间                经过地      班次
1    2014-11-01    北京           G01
2    2014-11-02    天津          G01
3    2014-11-03    石家庄       G01
4    2014-11-04    济南           G01
...
10  2014-11-01    北京           G02
11  2014-11-02    石家庄       G02        

现在想筛选出所有北京-石家庄的记录(包含经过地),筛选结果如下:

1    2014-11-01    北京           G01
2    2014-11-02    天津           G01
3    2014-11-03    石家庄       G01
10  2014-11-01    北京           G02
11  2014-11-02    石家庄       G02 

这个SQL语句怎么写才可以。

谢谢!!!


------解决思路----------------------
SELECT
A.*
FROM
[班次计划表]A
JOIN(
SELECT B.[班次],B.[时间]StartDate,C.[时间]EndDate,B.[经过地]StartCity,C.[经过地]EndCity
FROM[班次计划表]B JOIN[班次计划表]C ON B.[班次]=C.[班次]AND B.[时间]<=C.[时间]
WHERE B.[经过地]='北京' AND C.[经过地]='石家庄'
)D ON A.[班次]=D.[班次]AND A.[时间]>=D.StartDate AND A.[时间]<=D.EndDate

你参考一下吧~
------解决思路----------------------
本帖最后由 roy_88 于 2014-11-03 10:57:43 编辑
看看不是不这效果

use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[时间] Datetime,[经过地] nvarchar(3),[班次] nvarchar(3))
Insert #T
select 1,'2014-11-01',N'北京',N'G01' union all
select 2,'2014-11-02',N'天津',N'G01' union all
select 3,'2014-11-03',N'石家庄',N'G01' union all
select 4,'2014-11-04',N'济南',N'G01' union all
select 10,'2014-11-01',N'北京',N'G02' union all
select 11,'2014-11-02',N'石家庄',N'G02' union ALL
select 12,'2014-11-02',N'石家庄',N'G03' union ALL --新加G03
select 12,'2014-11-03',N'北京',N'G03' union ALL --新加G03
select 101,'2014-11-11',N'北京',N'G01' union all
select 102,'2014-11-12',N'天津',N'G01' union all
select 103,'2014-11-13',N'石家庄',N'G01' union all
select 104,'2014-11-14',N'济南',N'G01' union all
select 110,'2014-11-11',N'北京',N'G02' union all
select 111,'2014-11-12',N'石家庄',N'G02'
Go



SELECT  *
FROM    #T AS c
WHERE   EXISTS ( SELECT 1
                 FROM   #T AS a
                        INNER JOIN #T AS b ON a.[班次] = b.[班次]
                                              AND a.[经过地] = N'北京'
                                              AND b.[经过地] = '石家庄'
                                              AND a.[时间] < b.[时间]
                 WHERE  c.[班次] = a.[班次]
                 GROUP BY a.[时间]
                 HAVING c.[时间] BETWEEN a.[时间] AND MIN(b.[时间]) )
/*
1 2014-11-01 00:00:00.000 北京 G01
2 2014-11-02 00:00:00.000 天津 G01
3 2014-11-03 00:00:00.000 石家庄 G01
10 2014-11-01 00:00:00.000 北京 G02
11 2014-11-02 00:00:00.000 石家庄 G02
101 2014-11-11 00:00:00.000 北京 G01
102 2014-11-12 00:00:00.000 天津 G01
103 2014-11-13 00:00:00.000 石家庄 G01
110 2014-11-11 00:00:00.000 北京 G02
111 2014-11-12 00:00:00.000 石家庄 G02
*/