我有一个数据库表schedules
,如下所示:
现在,我正在尝试获取以下数据:
----------------------------------------------
| id | bus_id | route | dept_time | arr_time |
----------------------------------------------
| 1 | 1 | 1, 4 | 07:00:59 | 23:30:30 |
----------------------------------------------
route
只是station_id的集合,可以使用route_index.
进行索引。当arr_time
为NULL
时,它的意思是departing station
和dept_time
{1}}是NULL
,它的意思是,destination
。我已使用此查询对路线进行分组:
SELECT id,bus_id,GROUP_CONCAT(station_id SEPARATOR ', ') AS route FROM schedules GROUP BY bus_id;
但我不知道如何使用此查询获取arr_time
和dept_time
。此外,如何在此查询中获取station
名称而不是id。 Station
表仅包含(id and name)
。
答案 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;