我有一个DB,其中包含有关到达/离开车站的公共汽车的信息。在我的应用程序中,我需要显示用户选择的站点的所有离开。
这意味着我必须识别通过所选站点的每条线路。我用以下查询做到了:
SELECT DISTINCT LinePaths.TimetableID
,Lines.LineName AS [Line]
,Timetable.Heading
,LinePaths.Departure
,Regime.Name AS [Regime]
FROM LinePaths
INNER JOIN Timetables ON Timetables.TimetableID = LinePaths.TimetableID
INNER JOIN Lines ON Timetable.LineID = Lines.LineID
INNER JOIN Stations ON LinePaths.Station = Station.StationID
INNER JOIN Regimes ON Timetables.Regime = Regimes.RegimeID
WHERE Station = @Station
问题在于,我需要显示公交车前往的最终车站的名称而不是Timetable.Heading
。这些是我可以使用的表格的架构:
Stations - ID, Name
Lines - LineID, LineName
Timetable - TimetableID, LineID, Heading, Regime
(Regime
定义了公交车开往的日期)LinePaths - ID, TimetableID, SN, Arrival, Departure, StationID
(SN
是一个序列号,用于定义某些路径上的电台顺序(总线将按特定顺序到达这些电台)。)所以,我需要Timetable.Heading
而不是Stations.Name
,而我在这里遇到了问题。
该列必须代表公交车到达的最终站点(每条线路),因此我必须以某种方式识别最终站点(再次通过所选站点的每条线路)。为此,我必须使用LinePaths
表。在该表中,数据按TimetableID
分组,因此TimetableID
具有相同值的条目按SN
值排序,该值表示总线到达的顺序。站点(如:xxxxx, 1111, 3, 8:15, 8:20, 9999
) - 这意味着根据时间表1111
驾驶的公交车将在8:15
到达车站号9999
的车站,在{ {1}},该站点是此路由上的8:20
站点3rd
是xxxxx
的ID,对此查询并不重要。“
所以,最后,我的问题是 - 我如何使用SQL获取以下模式中的数据:
LinePath
,FinalStationName
,Departure(from selected station)
。答案 0 :(得分:1)
最有效的方法是使用一个带有TimetableID的新表和最终站的名称,并将此表与其他表连接,但如果您确实需要获取没有其他表的值,那么您是新手计算每个时间表的最终站点。此查询获取每个时间表的ID和最后一个站的名称
SELECT li.TimetableID, s.Name
FROM LinePaths li INNER JOIN
(SELECT TimetableID, max(SN) as SN FROM LinePaths) as aux
ON aux.TimetableID = li.TimetableID AND aux.SN = li.SN
INNER JOIN Stations s
ON s.ID = li.StationID
您可以将其用作子查询,并通过TimetableID将其加入您的查询。不是最有效的,但它应该有效。