2016-06-11 88 views
0

我有2個表格:stops和bus_route_details。如何在同一個My SQL查詢中獲取id,min和max?

stop_id stop_name 
     1 ‘C’ CROSS ROAD JUNCTION 
     2 10TH ROAD 
     3 16TH ROAD 
     4 4TH ROAD (GOLIBAR) 
     5 600TENAMENTGATE 
     6 A.D.MODI INSTITUTE 
     7 AHANSARI CHOWK 
     8 A.H.SCHOOL 
     9 A.P.M.COMPLEX 
    10 A.T.I. 
    11 AAI TULJABHAVANI CHOWK/LOKHANDWALA COMPLEX 
    12 AAKASH GANGA SOCIETY (DHARAVI) 

表格停止存儲每個站點的ID和名稱。 bus_route_details表存儲了bus_number,停靠表的停靠點的stop_id以及停靠點在該路線上出現的順序。第一站有1號線,而最後一站可以是44號線,如果路線共有44站。

bus_number stop_id stop_order 
     8 2139   30 
     8  351   31 
     8 1791   32 
     8  19   33 
     8  2   34 
     8  497   35 
     8 2024   36 
     8  20   37 
     8  404   38 
     8 1787   39 
     8  621   40 
     8 1937   41 
     8 1941   42 
     7  509   1 
     7  788   2 
     7  996   3 
     7 1340   4 
     7 1161   5 
     7  335   6 
     7 2296   7 
     7  891   8 

根據上述,我想得到一個表,顯示公交車號碼7和8開始和結束。 簡而言之,獲取不同的公交車編號列表,找到每個公共汽車的最小停站次序和最大停車次序。

7,開始,結束[這是我想要的總線編號和停止名稱]

我目前的查詢只給我2列:起點或結束stop_name。我如何檢索同一個查詢中的所有3列?

SELECT bus_number, stop_name from bus_route_details, stops `WHERE(bus_number, stop_order) IN (SELECT bus_number, MAX(stop_order)` 
FROM bus_route_details 
GROUP BY bus_number) 
AND stops.stop_id = bus_route_details.stop_id 

有什麼建議嗎?我做了UNION,並在2列中成功地獲得了4個結果,但是我希望3列。謝謝

回答

1

一個這樣做的目的就是要找到一個派生表的最小值和最大值,並加入站表的方式,並最終使用條件聚集扁平化的結果,像這樣:

select 
    b.Bus_number, 
    max(case when b.stop_order = x.mio then b.stop_id end) min_stop_id, 
    max(case when b.stop_order = x.mio then s.stop_name end) min_stop_name, 
    max(case when b.stop_order = x.mao then b.stop_id end) max_stop_id, 
    max(case when b.stop_order = x.mao then s.stop_name end) max_stop_name 
from bus_route_details b 
join (
    select Bus_number, min(stop_order) mio, max(stop_order) mao 
    from bus_route_details 
    group by Bus_number 
) x on b.Bus_number = x.Bus_number and (b.stop_order = x.mio or b.stop_order = x.mao) 
join stops s on b.stop_id = s.stop_id or b.stop_id = s.stop_id 
group by b.Bus_number; 

這將給你喜歡的結果:

Bus_number min_stop_id min_stop_name  max_stop_id max_stop_name 
----------- ----------- -------------------- ----------- -------------------- 
7   509   stop 1    891   stop 2 
8   351   stop 3    1941  stop 4 
0

使用雙內連接上停止

select b.stop_name as name_start, c.stop_name as finish_name 
    from 
    (SELECT bus_number, min(stop_order) as start_id, max(stop_order) as finish_id 
    from bus_route_details 
    group by bus_number) as t 
    inner join bus_route_details as b on t.start_id = b.stop_id 
    inner join bus_route_details as c on t.finish_id = c.stop_id 
+0

即使你在內部連接子句中將bus_route_details聲明爲b,它在phpmyadmin中拋出一個錯誤,表示在'字段列表'中的未知列'b.stop_name' – PirateApp

+0

我已更新答案.. – scaisEdge