对于这个不起眼的标题感到抱歉,但我不确定如何总结。
我正在处理几个表中提供给我的静态列车时刻表数据。我试图显示停在特定站点的所有列车,不包括指定站点 end 的列车。例如,当列出停在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)是在headign列中列出的(注意它与stop_name不匹配)。
+---------------+---------+---------+-------------------------+----------+----------------+
| 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):
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 |
+---------------+---------+-----------------------+----------+----------------+
在这种情况下,我只希望火车前往SUMMIT出现。但请记住,我不能简单地说stop_sequence> 1因为我想要包括可能是第二,第三等等的列车停靠 - 只是不是最后一站。
提前感谢您的帮助!
答案 0 :(得分:0)
您可以查询stop_times并检查其shape_dist_traveled == 0并获取相应的“行程ID”,然后使用此ID查询行程表。所以,你必须添加一个地方:
其中trips.trip_id in(从stop_times st中选择st.trip_id,其中st.shape_dist_traveled == 0)
P.S:我认为shape_dist_travelled会给出火车行驶的距离