请问关于数据库班次计划查询的有关问题
请教关于数据库班次计划查询的问题
现在数据库中有一张班次计划表
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语句怎么写才可以。
谢谢!!!
------解决思路----------------------
你参考一下吧~
------解决思路----------------------
看看不是不这效果
现在数据库中有一张班次计划表
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
你参考一下吧~
------解决思路----------------------
看看不是不这效果
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
*/