2016-06-11 4 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

一つの方法は、派生テーブルで最小と最大を見つけ、停止テーブルを結合し、最終的に結果を平らにするために、条件付き集約を使用することであるストップに参加いただき、ありがとうございますこのように:でもあなたかかわら

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

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; 

これは、あなたのような結果を与えるだろう内部join節でbus_route_detailsをbと宣言しましたが、phpmyadminに 'field list'の 'b.stop_name'という未知の列があるというエラーが返されます。 – PirateApp

+0

私は答えを更新しました。 – scaisEdge

関連する問題