复杂的SQL查询帮助

时间:2012-05-28 12:51:05

标签: sql

我有一个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, RegimeRegime定义了公交车开往的日期)
  • LinePaths - ID, TimetableID, SN, Arrival, Departure, StationIDSN是一个序列号,用于定义某些路径上的电台顺序(总线将按特定顺序到达这些电台)。)

所以,我需要Timetable.Heading而不是Stations.Name,而我在这里遇到了问题。

该列必须代​​表公交车到达的最终站点(每条线路),因此我必须以某种方式识别最终站点(再次通过所选站点的每条线路)。为此,我必须使用LinePaths表。在该表中,数据按TimetableID分组,因此TimetableID具有相同值的条目按SN值排序,该值表示总线到达的顺序。站点(如:xxxxx, 1111, 3, 8:15, 8:20, 9999) - 这意味着根据时间表1111驾驶的公交车将在8:15到达车站号9999的车站,在{ {1}},该站点是此路由上的8:20站点3rdxxxxx的ID,对此查询并不重要。“

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

  • LinePath
  • FinalStationName
  • Departure(from selected station)

1 个答案:

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