2015-09-01 25 views
0

使用標準GTFS數據庫,我想補充上了一趟我當前的查詢返回下面的最後一站的名稱:GTFS獲得最後一站旅途

| trip_id       | service_id | departure_stop | departure_time | arrival_stop | arrival_time | end_departure | 
|---------------------------------|------------|----------------|----------------|-----------------|--------------|---------------| 
| 15693832.T6.2-EPP-E-mjp-1.11.R | T6_1  | Clifton Hill | 04:56:00  | Flinders Street | 05:07:00  | 05:07:00  | 

等上。

我當前的查詢是:

select `t`.`trip_id`, 
     `c`.`service_id`, 
     `start_s`.`stop_name` as `departure_stop`, 
     `start_st`.`departure_time`, 
     `end_s`.`stop_name` as `arrival_stop`, 
     `end_st`.`arrival_time`, 
     `end_st`.`departure_time` as `end_departure` 
from `trips` as `t` 
    inner join `calendar` as `c` on `t`.`service_id` = `c`.`service_id` 
    inner join `routes` as `r` on `t`.`route_id` = `r`.`route_id` 
    inner join `stop_times` as `start_st` on `t`.`trip_id` = `start_st`.`trip_id` 
    inner join `stops` as `start_s` on `start_st`.`stop_id` = `start_s`.`stop_id` 
    inner join `stop_times` as `end_st` on `t`.`trip_id` = `end_st`.`trip_id` 
    inner join `stops` as `end_s` on `end_st`.`stop_id` = `end_s`.`stop_id` 
where `start_st`.`departure_time` > '00:00:00' 
    and `start_st`.`departure_time` < '23:59:59' 
    and `start_s`.`stop_id` = 19974 
    and `end_s`.`stop_id` = 19854 
    and start_st.departure_time < end_st.arrival_time 
order by arrival_time asc 

我卡試圖弄清楚我如何能得到的最後一站,在stop_times表,我的查詢返回每一行的trip_id

所以除了我有什麼現在,我想:

  • 獲取該trip_id最後stop_idstop_times
  • stops表得到stop_name爲相應stop_id
  • 顯示它作爲我的輸出的最後一列作爲last_stop

更新:

我試過選擇s.stop_name並添加以下內部聯接:

inner join (
    SELECT s.stop_name, trip_id 
     FROM stop_times 
     INNER JOIN stops as s on `s`.`stop_id` = `stop_times`.`stop_id` 
     ORDER BY stop_sequence DESC 
) s on `t`.`trip_id` = `s`.`trip_id` 

然而,這增加額外行的行程中的每一個站,在這裏我只希望最後一個和加入LIMIT 1返回沒有結果。

+0

嘗試添加end_s.stop_id = MAX(end_st.stop_sequence) –

+0

我在哪裏具體添加?在where子句中使用 –

+0

。它所做的是確保stop_id的結尾是最大值(例如最後一次停止)。 –

回答

1

一個警告,到達和離開時間可以是晚於GTFS規範午夜(小時值可以是24,25等)

select "t"."trip_id", 
     "c"."service_id", 
     "start_s"."stop_name" as "departure_stop", 
     "start_st"."departure_time", 
     "end_s"."stop_name" as "arrival_stop", 
     "end_st"."arrival_time", 
     "end_st"."departure_time" as "end_departure", 
     "last_st"."arrival_time" as "last_arrival", 
     "last_s"."stop_name" as "last_stop" 
from "trips" as "t" 
    inner join "calendar" as "c" on "t"."service_id" = "c"."service_id" 
    inner join "routes" as "r" on "t"."route_id" = "r"."route_id" 
    inner join "stop_times" as "start_st" on "t"."trip_id" = "start_st"."trip_id" 
    inner join "stops" as "start_s" on "start_st"."stop_id" = "start_s"."stop_id" 
    inner join "stop_times" as "end_st" on "t"."trip_id" = "end_st"."trip_id" 
    inner join "stops" as "end_s" on "end_st"."stop_id" = "end_s"."stop_id" 
    inner join "stop_times" as "last_st" on "t"."trip_id" = "last_st"."trip_id" 
    inner join "stops" as "last_s" on "last_st"."stop_id" = "last_s"."stop_id" 
where "start_s"."stop_id" = '245' -- my data's stop id 
    and "end_s"."stop_id" = '762' -- my data's stop id 
    and "last_st"."stop_sequence" = (select max("stop_sequence") from "stop_times" where "t"."trip_id" = "trip_id") 
    and start_st.departure_time < end_st.arrival_time 
order by arrival_time asc 
+0

這正是我需要的,謝謝! –