Вам нужно будет использовать комбинацию (DepartureTime + TrainNumber) в качестве ключа для вашего запроса, получить максимальное время прибытия при данной комбинации значений, а затем выяснить, что такое соответствующая ArrivalStation. Таким образом, вы можете выполнить внутреннее соединение между расписанием и сгруппированной версией самого себя, т. Е.
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). Вы также можете использовать max (LegID), если каждый LegID больше, чем предыдущий. Кроме того, я предположил, что ArrivalTime включает дату, поэтому 1:00 AM на следующий день все еще позже, чем 22:00 того же дня. Так что, конечно, подстраивайся по вкусу.