SQL для получения следующих станций на основе station_id в данных GTFS - PullRequest
0 голосов
/ 22 октября 2018

Это мой SQL-запрос

SELECT 
Routes.route_id, Routes.route_desc, Routes.route_type, 
Trips.service_id, Trips.trip_id, Trips.route_direction, 
Stop_times.stop_id, Stop_times.arrival_time, Stop_times.departure_time, 
Stops.stop_name, Calendar.start_date, Calendar.end_date
FROM Trips 
INNER JOIN Routes ON Trips.route_id = Routes.route_id
INNER JOIN Stop_times ON Trips.trip_id = Stop_times.trip_id 
INNER JOIN Stops ON Stop_times.stop_id = Stops.stop_id
INNER JOIN Calendar ON Trips.service_id = Calendar.service_id
WHERE 
Calendar.start_date = strftime('%Y%m%d','now') and
CAST(REPLACE(Stop_times.arrival_time, ':', '') as decimal)  
         >= strftime('%H%M%S', 'now', 'localtime')
and Trips.direction_id = 0
and Stop_times.stop_id = '279018' 
ORDER BY Stop_times.arrival_time asc

1> Я привел вот так

(многие другие столбцыа также)

2> Я хочу использовать trip_id первого ряда и указать его как

SELECT 
Routes.route_id, Routes.route_desc, Routes.route_type, 
Trips.service_id, Trips.trip_id, Trips.route_direction, 
Stop_times.stop_id, Stop_times.arrival_time, Stop_times.departure_time, 
Stops.stop_name, Calendar.start_date, Calendar.end_date
FROM Trips 
INNER JOIN Routes ON Trips.route_id = Routes.route_id
INNER JOIN Stop_times ON Trips.trip_id = Stop_times.trip_id 
INNER JOIN Stops ON Stop_times.stop_id = Stops.stop_id
INNER JOIN Calendar ON Trips.service_id = Calendar.service_id
WHERE 
Calendar.start_date = strftime('%Y%m%d','now') and
CAST(REPLACE(Stop_times.arrival_time, ':', '') as decimal)  
         >= strftime('%H%M%S', 'now', 'localtime')
and Trips.direction_id = 0
and Stop_times.trip_id = 'what ever on first row from above query example 551.22018xxxxx' 
ORDER BY Stop_times.arrival_time asc

Результат должен быть следующим:

Заранее спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать subquery, чтобы обернуть свой результат и использовать результат для выполнения фильтра.

Ваш запрос должен быть таким:

SELECT *
FROM(
SELECT 
    Routes.route_id, Routes.route_desc, Routes.route_type, 
    Trips.service_id, Trips.trip_id, Trips.route_direction, 
    Stop_times.stop_id, Stop_times.arrival_time, Stop_times.departure_time, 
    Stops.stop_name, Calendar.start_date, Calendar.end_date
 FROM Trips 
    INNER JOIN Routes ON Trips.route_id = Routes.route_id
    INNER JOIN Stop_times ON Trips.trip_id = Stop_times.trip_id 
    INNER JOIN Stops ON Stop_times.stop_id = Stops.stop_id
    INNER JOIN Calendar ON Trips.service_id = Calendar.service_id
 WHERE 
    Calendar.start_date = strftime('%Y%m%d','now') and
    CAST(REPLACE(Stop_times.arrival_time, ':', '') as decimal)  
             >= strftime('%H%M%S', 'now', 'localtime')
    and Trips.direction_id ={}
    and Stops_Time.Stop_ID = 'xxxx' 
ORDER BY Stop_times.arrival_time ASC)
WHERE Trip_ID = @Trip_ID

РЕДАКТИРОВАТЬ:

Вам нужно всего лишь 1 строку в первой строке в Stop_Times.Stop_ID, поэтому оберните то же условие первым и добавьте limit

 SELECT 
    Routes.route_id, Routes.route_desc, Routes.route_type, 
    Trips.service_id, Trips.trip_id, Trips.route_direction, 
    Stop_times.stop_id, Stop_times.arrival_time, Stop_times.departure_time, 
    Stops.stop_name, Calendar.start_date, Calendar.end_date
 FROM Trips 
    INNER JOIN Routes ON Trips.route_id = Routes.route_id
    INNER JOIN Stop_times ON Trips.trip_id = Stop_times.trip_id 
    INNER JOIN Stops ON Stop_times.stop_id = Stops.stop_id
    INNER JOIN Calendar ON Trips.service_id = Calendar.service_id
 WHERE 
    Calendar.start_date = strftime('%Y%m%d','now') and
    CAST(REPLACE(Stop_times.arrival_time, ':', '') as decimal)  
             >= strftime('%H%M%S', 'now', 'localtime')
    and Trips.direction_id ={}
    and Stop_Times.Trip_ID = 
        (SELECT Stop_Times.Trip_ID
         FROM Trips
            INNER JOIN Stop_times ON Trips.trip_id = Stop_times.trip_id 
            INNER JOIN Stops ON Stop_times.stop_id = Stops.stop_id
            INNER JOIN Calendar ON Trips.service_id = Calendar.service_id
          WHERE
            Calendar.start_date = strftime('%Y%m%d','now') and
            CAST(REPLACE(Stop_times.arrival_time, ':', '') as decimal)  
                   >= strftime('%H%M%S', 'now', 'localtime')
            and Trips.direction_id ={}
          ORDER BY Stop_times.arrival_time ASC LIMIT 1) 
 ORDER BY Stop_times.arrival_time ASC
...