我有一个包含列车时刻表的SQL表。该表看起来像这样:
TrainNumber
LegID
DepartureTime
DepartureStation
ArrivalTime
到达站
我的真实数据库包含几个表,但对于这个问题,只有上面的一个是相关的。不同的trainNumber可以有不同数量的腿。基于用户选择的出发站,我想输出该站的所有即将到来的路线。
输出必须包含出发时间和到达站。但我不想在两者之间包括腿。任何人都可以指导我如何实现这一目标吗?我尝试使用max语句。但是并没有按照我想要的方式让它工作。
此外,同一天的同一列车号码可能有多次出发。
答案 0 :(得分:0)
您需要使用组合(DepartureTime + TrainNumber)作为查询的关键,获取给定值组合的最大到达时间,然后找出相应的ArrivalStation是什么。因此,您可以在Schedule和自身的分组版本之间进行内部联接,即
SELECT
TrainTableA.TrainNumber
,TrainTableA.DepartureTime
,ArrivalStation
FROM
(SELECT /* all upcoming train routes for given station */
TrainNumber
,DepartureTime
,ArrivalTime
,ArrivalStation
FROM
Schedule
WHERE DepartureStation = givenStation
) as TrainTableA
INNER JOIN
(SELECT /* Just the last station for each departure */
TrainNumber
,DepartureTime
,Max(ArrivalTime) as a
FROM
Schedule
GROUP BY
TrainNumber
,DepartureTime
) as TrainTableB
ON
TrainTableA.TrainNumber = TrainTableB.TrainNumber
AND TrainTableA.DepartureTime = TrainTableB.DepartureTime
AND TrainTableA.ArrivalTime = TrainTableB.a
如果你有一个路由序列的通用指标,我无法从问题中得知,所以我使用了max(ArrivalTime)。如果每个LegID都大于之前的LegID,您也可以使用max(LegID)。此外,我假设The ArrivalTime包含日期,因此第二天凌晨1:00仍然晚于当天晚上10:00。所以,当然,要适应口味。