我有2个表:stops和bus_route_details。

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,stops表中的站点的stop_id以及该站点在该路线上出现的顺序。如果路线的总站数为44,则第一站的顺序为1,而最后一站的数字可以为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,开始,结束[这就是我想要的公交车号和站点名称]

我当前的查询仅给我两列:起始或终止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列。谢谢

最佳答案

一种方法是在派生表中找到最小值和最大值,并加入stops表,最后使用条件聚合来使结果变平,如下所示:

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

关于mysql - 如何在同一My SQL查询中获取ID,最小值和最大值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37762274/

10-09 00:50