Исключая строки, где максимальное значение в одном столбце используется для проверки значения в другом? - PullRequest
0 голосов
/ 23 июня 2011

Извините за неясное название, но я не знаю, как его подвести.

Я работаю с некоторыми статическими данными расписания поездов, предоставленными мне в нескольких таблицах.Я пытаюсь показать все поезда, которые останавливаются на определенной станции, за исключением тех, которые заканчиваются на указанной станции.Так, например, при перечислении всех поездов, которые останавливаются на станции NYPenn, я не хочу, чтобы эти поезда заканчивались на станции NYPenn.

Соответствующие таблицы:

trips - перечислить всеиз поездок, совершаемых каждый день.каждая поездка имеет trip_id и состоит из одной или нескольких остановок.он также содержит столбец trip_headsign, который показывает конечный пункт назначения поезда, но в виде текста (не ID).

+----------+------------+---------+-------------------------+--------------+----------+----------+
| route_id | service_id | trip_id | trip_headsign           | direction_id | block_id | shape_id |
+----------+------------+---------+-------------------------+--------------+----------+----------+
|        1 |          1 |       1 |  PRINCETON RAIL SHUTTLE |            1 |      603 |        1 | 
|        1 |          2 |       2 |  PRINCETON RAIL SHUTTLE |            1 |      603 |        2 | 
+----------+------------+---------+-------------------------+--------------+----------+----------+

stop_times - перечисляет все остановки, сделанные каждым поездом.все остановки, сделанные в одной поездке, имеют общий trip_id, так что это то, что я LEFT JOIN включил.в этой таблице также есть столбец с именем stop_sequence в диапазоне от 1 до n, где n - общее количество остановок для этой поездки.Поезд отправляется в stop_sequence=1.Это значение варьируется от 2 до 26.

+---------+--------------+----------------+---------+---------------+-------------+---------------+---------------------+
| trip_id | arrival_time | departure_time | stop_id | stop_sequence | pickup_type | drop_off_type | shape_dist_traveled |
+---------+--------------+----------------+---------+---------------+-------------+---------------+---------------------+
|       1 | 21:15:00     | 21:15:00       |   24070 |             1 |           0 |             0 |                   0 | 
|       1 | 21:25:00     | 21:25:00       |   41586 |             2 |           0 |             0 |              2.5727 | 
+---------+--------------+----------------+---------+---------------+-------------+---------------+---------------------+

Этот конкретный поезд делает только две остановки.Последняя остановка (41586) - это то, что указано в столбце заголовка (обратите внимание, что оно не соответствует имени_стопа).

+---------------+---------+---------+-------------------------+----------+----------------+
| stop_sequence | stop_id | trip_id | trip_headsign           | block_id | departure_time |
+---------------+---------+---------+-------------------------+----------+----------------+
|             1 |   24070 |       1 |  PRINCETON RAIL SHUTTLE |      603 | 21:15:00       | 
|             2 |   41586 |       1 |  PRINCETON RAIL SHUTTLE |      603 | 21:25:00       | 
+---------------+---------+---------+-------------------------+----------+----------------+

+---------+----------------------------+-----------+-----------+------------+---------+
| stop_id | stop_name                  | stop_desc | stop_lat  | stop_lon   | zone_id |
+---------+----------------------------+-----------+-----------+------------+---------+
|   41586 | PRINCETON RAILROAD STATION |           | 40.343398 | -74.659872 |     336 | 
+---------+----------------------------+-----------+-----------+------------+---------+

Итак, опять же, я хочу показать список всехпоезда, которые останавливаются на определенной станции, за исключением тех, которые заканчиваются на данной станции.Запрос, который я написал для этого, (в данном случае для stop_id 105, который является станцией NY Penn):

select stop_sequence, trips.trip_id, trip_headsign, trips.block_id, departure_time from rail_data.trips left join rail_data.stop_times on trips.trip_id = stop_times.trip_id where stop_id = '105' order by departure_time asc;

Это возвращает результаты, подобные этому:

+---------------+---------+-----------------------+----------+----------------+
| stop_sequence | trip_id | trip_headsign         | block_id | departure_time |
+---------------+---------+-----------------------+----------+----------------+
|            18 |    1342 | NEW YORK PENN STATION |     6600 | 05:43:00       | 
|             1 |    1402 | SUMMIT                |     6305 | 06:07:00       | 
|            16 |    1328 | NEW YORK PENN STATION |     6604 | 06:34:00       | 
|             1 |    1391 | SUMMIT                |     6307 | 06:41:00       | 
|            19 |    1360 | NEW YORK PENN STATION |     6908 | 06:47:00       | 
+---------------+---------+-----------------------+----------+----------------+

В этом случае я хочу, чтобы только поезда, направлявшиеся в САММИТ, появлялись.Но помните, я не могу просто сказать, где stop_sequence> 1, потому что я хочу включить поезда, которые могут быть второй, третьей и т. Д. Остановкой - просто не конечной остановкой.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 23 июня 2011

вы можете запросить stop_times и проверить его shape_dist_traveled == 0 и взять соответствующий "идентификатор поездки" , а затем запросить таблицу trips с этим идентификатором. Итак, вы должны добавить где:

где trips.trip_id in (выберите st.trip_id из stop_times st, где st.shape_dist_traveled == 0)

P.S .: Я предполагал, что shape_dist_travelled даст расстояние, пройденное поездом

...