使用id对数据进行分组,并从第一行和最后一行获取数据

时间:2016-10-24 21:56:13

标签: mysql sql database select group-by

我有一个数据库表schedules,如下所示:

enter image description here

现在,我正在尝试获取以下数据:

----------------------------------------------
| id | bus_id | route | dept_time | arr_time |
----------------------------------------------
| 1 |    1    |  1, 4 | 07:00:59  | 23:30:30 |
----------------------------------------------

route只是station_id的集合,可以使用route_index.进行索引。当arr_timeNULL时,它的意思是departing stationdept_time {1}}是NULL,它的意思是,destination。我已使用此查询对路线进行分组:

SELECT id,bus_id,GROUP_CONCAT(station_id SEPARATOR ', ') AS route FROM schedules GROUP BY bus_id;

但我不知道如何使用此查询获取arr_timedept_time。此外,如何在此查询中获取station名称而不是id。 Station表仅包含(id and name)

1 个答案:

答案 0 :(得分:1)

您可以使用联接将站ID转换为其名称。至于到达和离开时间 - 这是一个肮脏的技巧,但由于聚合函数忽略null,你可以使用min / max来获取它们:

SELECT   sch.bus_id,
         GROUP_CONCAT(st.name ORDER BY route_index SEPARATOR ', ') AS route,
         MIN(dept_time) AS dept_time,
         MAX(arr_time) AS arr_time
FROM     schedules sch
JOIN     stations st ON sch.station_id = st.id
GROUP BY bus_id;