【发布时间】:2017-10-01 06:45:59
【问题描述】:
我希望使用 asp.net web api & sql server 数据库建立一个铁路时刻表。
以下是时间表的示例数据库设计。我使用这个查询来尝试查找时间表的算法。
我当前的问题是当我尝试源和目标[A-B] 时,它也会重新运行[B-A] 结果。我仍然没有考虑时间因素。也感谢您的宝贵建议。
预期输出:
我还有停靠点的地理位置..
DECLARE @Souce INT = 2 , @Destination INT = 11
DECLARE @Routes TABLE(
ID INT,
RouteStart VARCHAR(MAX),
RouteStop VARCHAR(MAX)
)
DECLARE @TrainTimeTable TABLE(
ID INT,
RoutID INT,
Sequance INT, -- determine the next station of the same route
BeforeStation INT,
CurrentStation INT,
[Arr.Time] TIME,
[Dep.Time] TIME
)
DECLARE @Halts TABLE(
ID INT,
Name VARCHAR(MAX)
)
INSERT INTO @Routes VALUES (1,'A','B'),
(2,'B', 'C'),
(3,'B', 'A');
INSERT INTO @Halts VALUES (1,'A1'),
(2,'A2'),
(3,'A3'),
(4,'A4'),
(5,'A5'),
(6,'A6'),
(7,'B1'),
(8,'B2'),
(9,'B3'),
(10,'B4'),
(11,'B5'),
(12,'B6');
/*A To B*/
INSERT @TrainTimeTable VALUES (1,1,1,1,1,'06:00','6:01'),
(2,1,2,1,2,'6:05' ,'6:06'),
(3,1,3,2,3,'6:10' ,'6:11'),
(4,1,4,3,4,'6:15' ,'6:16'),
(5,1,5,4,5,'6:20' ,'6:21'),
(6,1,6,5,6,'6:25' ,'6:25'); -- Stops here
/*B To C*/
INSERT @TrainTimeTable VALUES (7,2,1,6,6,'6:30','6:31'),
(8,2,2,6,7,'6:35','6:36'),
(9,2,3,7,8,'6:40','6:41'),
(10,2,4,8,9,'6:45','6:46'),
(11,2,5,9,10,'6:50','6:51'),
(12,2,6,10,11,'7:00','7:01'),
(13,2,7,11,12,'7:10','7:10'); -- stops here
/*B to A*/
INSERT @TrainTimeTable VALUES (14,3,1,6,6,'06:00','6:01'),
(15,3,2,6,5,'6:05' ,'6:06'),
(16,3,3,5,4,'6:10' ,'6:11'),
(17,3,4,4,3,'6:15' ,'6:16'),
(18,3,5,3,2,'6:20' ,'6:21'),
(19,3,6,2,1,'6:25' ,'6:25'); -- Stops here
SELECT tc.*,
hl1.Name AS 'BeforeName',
hl2.Name AS 'CurrentName',
rr.RouteStart + ' - '+rr.RouteStop AS 'Route'
FROM @TrainTimeTable tc
INNER JOIN @Routes rr ON rr.ID = tc.RoutID
INNER JOIN @Halts hl1 ON hl1.ID = tc.BeforeStation
INNER JOIN @Halts hl2 ON hl2.ID = tc.CurrentStation
WHERE tc.CurrentStation BETWEEN @Souce AND @Destination
【问题讨论】:
-
你能包括你期望的输出吗?
-
请期待结果。
-
您能解释一下您的表架构以及它与其他表的关系吗
-
@Xedni 问题已更新。
-
@Sami - 问题已更新
标签: sql .net sql-server