【发布时间】:2016-01-14 15:04:06
【问题描述】:
如果我有一个包含多个停靠点的巴士表,并且每个停靠点记录都有一个到达时间,我如何按最早的停靠点时间检索和订购巴士?
_______ ________
| Buses | | Stops |
|-------| |--------|
| id | | id |
| name | | bus_id |
------- | time |
--------
我可以通过以下查询来做到这一点:
SELECT DISTINCT sub.id, sub.name
FROM
(SELECT buses.*, stops.time
FROM buses
INNER JOIN stops ON stops.bus_id = buses.id
ORDER BY stops.time) AS sub;
...但是这样做的缺点是必须执行 2 次查询,并且必须在 SELECT DISTINCT 子句中指定总线中的所有字段。如果 bus 表发生变化,这会变得特别烦人。
我想做的是这样的:
SELECT DISTINCT buses.*
FROM buses
INNER JOIN stops ON stops.bus_id = buses.id
ORDER BY stops.time;
...但是,为了获得DISTINCT buses.*,我还必须在其中包含stops.time,这会给我提供不同停靠时间的重复巴士。
执行此查询的更好方法是什么?
【问题讨论】:
标签: sql postgresql