我是第一次使用GTFS结构,但在查询时遇到了麻烦。我已经将运输数据存储到mysql表中,可以自由查询它们,但是我感觉我在进行太多的查询和for循环以获取最简单的信息。
我想在一个查询中得到的是两个已知站点之间的所有出发时间和到达时间,可能用名称来标识。
这是我到目前为止所涉及的内容,其中涉及一个查询,然后遍历每个trip_id以查找出发和到达站的信息+时间。
查询1 :
显示在特定方向上从特定始发站出发的所有出发时间。结果将给出出发时间和trip_ids。
SELECT t.trip_id, trip_headsign, departure_time, direction_id, s.stop_name
FROM stops s, routes r, stop_times st, calendar c, trips t
WHERE departure_time > "00:00:00" and departure_time < "23:59:59"
AND r.route_id=1 and s.stop_id = 42
AND s.stop_id = st.stop_id
AND st.trip_id = t.trip_id
AND c.service_id = t.service_id
AND c.monday=1 and direction_id=1;
结果
+---------+---------------+----------------+--------------+-----------+
| trip_id | trip_headsign | departure_time | direction_id | stop_name |
+---------+---------------+----------------+--------------+-----------+
| 5671498 | Grand Central | 04:43:00 | 1 | Garrison |
| 5671501 | Grand Central | 05:13:00 | 1 | Garrison |
| 5671504 | Grand Central | 05:43:00 | 1 | Garrison |
| 5671506 | Grand Central | 06:08:00 | 1 | Garrison |
| 5671507 | Grand Central | 06:32:00 | 1 | Garrison |
| 5671513 | Grand Central | 06:53:00 | 1 | Garrison |
| 5671516 | Grand Central | 07:18:00 | 1 | Garrison |
| 5671519 | Grand Central | 07:40:00 | 1 | Garrison |
| 5671521 | Grand Central | 08:03:00 | 1 | Garrison |
| 5671523 | Grand Central | 08:32:00 | 1 | Garrison |
| 5671525 | Grand Central | 08:58:00 | 1 | Garrison |
| 5671526 | Grand Central | 09:27:00 | 1 | Garrison |
| 5671529 | Grand Central | 10:24:00 | 1 | Garrison |
| 5671532 | Grand Central | 11:24:00 | 1 | Garrison |
| 5671535 | Grand Central | 12:24:00 | 1 | Garrison |
| 5671537 | Grand Central | 13:24:00 | 1 | Garrison |
| 5671540 | Grand Central | 14:24:00 | 1 | Garrison |
| 5671542 | Grand Central | 15:24:00 | 1 | Garrison |
| 5671543 | Grand Central | 16:22:00 | 1 | Garrison |
| 5671547 | Grand Central | 17:24:00 | 1 | Garrison |
| 5671550 | Grand Central | 18:24:00 | 1 | Garrison |
| 5671552 | Grand Central | 19:26:00 | 1 | Garrison |
| 5671554 | Grand Central | 20:24:00 | 1 | Garrison |
| 5671556 | Grand Central | 21:24:00 | 1 | Garrison |
| 5671557 | Grand Central | 22:24:00 | 1 | Garrison |
| 5671559 | Croton-Harmon | 23:24:00 | 1 | Garrison |
+---------+---------------+----------------+--------------+-----------+
查询2 :
给我所有特定行程的停靠点以及到达时间,请使用上一个查询中的trip_id:
SELECT s.stop_id,stop_lat, stop_lon, stop_name, arrival_time, stop_sequence
FROM stop_times st JOIN stops s ON s.stop_id=st.stop_id
WHERE trip_id=5671521;
结果
+---------+-----------+------------+------------------+--------------+---------------+
| stop_id | stop_lat | stop_lon | stop_name | arrival_time | stop_sequence |
+---------+-----------+------------+------------------+--------------+---------------+
| 51 | 41.705839 | -73.937946 | Poughkeepsie | 07:31:00 | 1 |
| 49 | 41.587448 | -73.947226 | New Hamburg | 07:41:00 | 2 |
| 46 | 41.504007 | -73.984528 | Beacon | 07:50:00 | 3 |
| 43 | 41.415283 | -73.958090 | Cold Spring | 07:58:00 | 4 |
| 42 | 41.381780 | -73.947202 | Garrison | 08:03:00 | 5 |
| 40 | 41.332601 | -73.970426 | Manitou | 08:08:00 | 6 |
| 39 | 41.285962 | -73.930420 | Peekskill | 08:17:00 | 7 |
| 37 | 41.246259 | -73.921884 | Cortlandt | 08:22:00 | 8 |
| 33 | 41.189903 | -73.882394 | Croton-Harmon | 08:32:00 | 9 |
| 4 | 40.805157 | -73.939149 | Harlem-125th St. | 09:09:00 | 10 |
| 1 | 40.752998 | -73.977056 | Grand Central | 09:22:00 | 11 |
+---------+-----------+------------+------------------+--------------+---------------+
我真正想要的是两个站点之间的出发时间和到达时间的列表,例如理论上的结果:
+---------+----------------+----------------+-----------+---------------+--------------+
| trip_id | departure_stop | departure_time | direction | arrival_stop | arrival_time |
+---------+----------------+----------------+-----------+---------------+--------------+
| 5671521 | Garrison | 08:03:00 | 1 | Grand Central | 09:22:00 |
| 5671522 | Garrison | 08:32:00 | 1 | Grand Central | 09:51:00 |
...etc...
只需将数据连接在一起,stops
两次连接就可以开始和结束停止,stop_times
两次连接就可以开始和结束stop_times, 我唯一不确定的是它direction_id
来自哪里。
请尝试以下查询。 在查询的最后,您可以指定start_s.stop_id
和end_s.stop_id
,代表要查询数据的两个停靠点。
SELECT t.trip_id,
start_s.stop_name as departure_stop,
start_st.departure_time,
direction_id as direction,
end_s.stop_name as arrival_stop,
end_st.arrival_time
FROM
trips t INNER JOIN calendar c ON t.service_id = c.service_id
INNER JOIN routes r ON t.route_id = r.route_id
INNER JOIN stop_times start_st ON t.trip_id = start_st.trip_id
INNER JOIN stops start_s ON start_st.stop_id = start_s.stop_id
INNER JOIN stop_times end_st ON t.trip_id = end_st.trip_id
INNER JOIN stops end_s ON end_st.stop_id = end_s.stop_id
WHERE c.monday = 1
AND direction_id = 1
AND start_st.departure_time > "00:00:00" AND start_st.departure_time < "23:59:59"
AND r.route_id = 1
AND start_s.stop_id = 42
AND end_s.stop_id = 1
我尝试从此链接查找GTFS结构示例,但找不到任何内容direction_id
指定停止名称而不是AND start_s.stop_id = 42 AND end_s.stop_id = 1
仅使用AND start_s.stop_name = 'Garrison' AND end_s.stop_name = 'Grand Central'
问题内容: 我正在尝试列出两个日期之间的所有月份。 例如; 开始日期是:,最后日期是: 我想列出这样的东西: 这是我尝试过的,但根本没有用: 问题答案: PHP 5.3 PHP 5.4或更高版本 我们将开始日期和结束日期修改为每月第一天的部分很重要。如果我们不这样做,则当前日期要比2月的最后一天高(例如,非-年为28,leap年为29),则跳过2月。
问题内容: 伙计们,我需要列出上个月的所有日期,如下所示 请让我知道是否有比此查询更好的方法。 还请让我知道此查询的问题,它说 “缺少右括号” 强调文字 问题答案: 听起来你想要这样的东西
问题内容: 我的问题类似于以下问题: http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID:14582643282111 区别在于我的内部查询返回两条记录,而我有外部查询。 我需要编写类似这样的内部查询,这将为我提供两个日期范围之间的日期列表(我正在尝试不执行此查询)。 我的内部查询返回以下2行: 所以我需要内部查
问题内容: 输入tb1 该查询只能在数字和名称上找到相同的重复项,但无法在第3和第4行中找到重复项!!! 这个查询可以找到所有重复的名字!!!它完美地工作 这个查询可以找到所有重复的数字!!!它完美地工作 我想要一个查询,该查询可以查找名称和数字中的所有重复项,无论名称是否包含小写和大写 问题答案: 更新的问题 “在编号和名称上都获取重复” …“在不同的列上使用名称和编号” 在这里行可以被计数两次
我们希望您能够帮助我们解决以下问题: 给出了一个可能包含圈的有向图。必须找到一组满足以下标准的路径: 在从节点A到节点B的过程中可以通过的所有边必须被集合内的路径覆盖(一条边可以是集合中多条路径的一部分) 解决方案不必是路径数最少的解决方案,路径也不必是最短的。然而,该解决方案应该可以像java一样使用编程语言高效地实现。我们需要解决方案来生成几个测试用例,覆盖节点a和节点B之间的所有边很重要。
问题内容: 我需要使用完全相同的列名来连接两个表。在连接步骤之前,我将需要重命名列。 每个表包含100多个列。 我想知道是否有任何方法可以添加前缀或后缀来重命名所有列,而不是使用手动更改它们。我在BigQuery上使用标准SQL。我在下面举例说明。我想知道BigQuery中是否有任何功能,例如: ……例子……在此先谢谢你! 问题答案: *显然,最终 *使用 如下所示, 而不是 最终 使用 结果 :