我想编写一个SQL查询,该查询连接两个表,在这两个表中,我可以看到驾驶员姓名和最近路线的目的地、到达日期和到达时间。drivers
:
| 驱动程序编号|姓名|家|
| - -|- -|- -|
| 一个|鲍勃|哥伦布|routes
:
| 驱动程序编号|目的地|到达日期|到达时间|
| - -|- -|- -|- -|
| 一个|哥伦布|小行星1220825|一千二百|
| 一个|印第安纳波利斯|小行星1220825|一八零零年|
| 一个|哥伦布|小行星1220826|千元|
| 一个|印第安纳波利斯|小行星1220826|一千二百|
一个驾驶员可以在一天内被分配到多条路线。
因此,我想要的查询会传回:
| 驱动程序编号|姓名|目的地|到达日期|到达时间|
| - -|- -|- -|- -|- -|
| 一个|鲍勃|印第安纳波利斯|小行星1220826|一千二百|
我尝试了不同的连接和子选择,但是我没有尝试将行程数据限制到最近的路线。这是我目前得到的最接近的路线,但是它不起作用,因为drivers.driver_num不在子选择的范围内:
select
driver_num,
name,
destination,
arrived_date,
arrived_time
from drivers d
join (
select driver_num, destination, arrived_date, arrived_time
from routes r
where r.driver_num = d.driver_num
order by arrived_date desc, arrived_time desc
limit 1
) as most_resent_trip
on r.driver_num = most_resent_trip.driver_num
order by name desc;
2条答案
按热度按时间pw9qyyiw1#
我使用了
row_number
,以防您有多个驱动程序,并且希望在同一个表中显示所有驱动程序的结果。我使用了SQL Server而不是DB2,但它非常简单,所以应该可以很好地翻译。
| 驱动程序编号|姓名|目的地|到达日期|到达时间|
| - -|- -|- -|- -|- -|
| 一个|鲍勃|印第安纳波利斯|小行星1220826|一千二百|
Fiddle
taor4pac2#
LATERAL
(或可使用TABLE
子句代替)使用示例。| 驱动程序_编号|目的地|到达日期|到达时间|名称|
| - -|- -|- -|- -|- -|
| 一个|印第安纳波利斯|小行星1220826|一千二百|鲍勃|