0

我有一个数据库,其中包含有关到达/离开车站的公共汽车的信息。在我的应用程序中,我需要显示用户选择的车站的所有发车时间。

这意味着我必须识别通过所选车站的每条线路。我通过以下查询做到了这一点:

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, RegimeRegime定义巴士在哪几天开车)
  • LinePaths - ID, TimetableID, SN, Arrival, Departure, StationID(这SN是一个序列号,它定义了特定路径上的站点顺序(总线将按特定顺序到达这些站点)。)

所以,Timetable.Heading我需要一个Stations.Name, 而不是我的问题。

该列必须代​​表公共汽车要去的最终车站(对于每条线路),所以我必须以某种方式识别最终车站(再次对于通过所选车站的每条线路)。为此,我必须使用LinePaths这张桌子。在该表中,数据按 分组TimetableID,因此具有相同值的条目按表示公共汽车到达车站顺序TimetableID的值排序(如下所示:) - 这意味着根据到时间表将到达带有 StationID 的车站,离开在,并且该车站是这条路线上的车站(是 的 ID,对于此查询并不重要)。SNxxxxx, 1111, 3, 8:15, 8:20, 999911118:1599998:203rdxxxxxLinePath

所以,最后,我的问题是 - 我如何使用 SQL 获取以下模式中的数据:

  • FinalStationName,
  • Departure(from selected station),
  • Regime.
4

1 回答 1

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 将其加入您的查询。不是最有效的事情,但它应该工作。

于 2012-05-28T13:21:27.047 回答