我的查询有问题,我无法弄明白。已经尝试了一段时间,但我无法弄明白。如果你可以帮助我,那将是一个很大的帮助。所以...我有4张桌子:
cars - ID, make, model, plate_number, price, type, year, owner_ID
persons - ID, name, surname, pers_code
insurance_data - company_ID, car_ID, first_date, last_date
companies - ID, title
到目前为止,我的查询是..
SELECT cars.plate_number, persons.name, persons.surname, insurance_data.last_date
FROM cars,persons,insurance_data
WHERE cars.owner_ID = persons.ID AND cars.ID = insurance_data.car_ID
输出车牌号码,车主和车辆保险的最后日期。但问题是,有两辆汽车有两个保险结束日期,所以在输出中有两个相同的汽车条目和两个保险结束日期。我需要的是每辆车只有一个条目,相应的保险结束日期应该是最新的。
我知道这是非常基本的,但我是数据库的第一年学生,这是我的第一个任务之一。提前致谢
答案 0 :(得分:0)
(1)从不在FROM
子句中使用逗号。 始终使用正确的JOIN
语法。
(2)使用表别名!
您的问题的答案是DISTINCT ON
:
SELECT DISTINCT ON (c.plate_number) c.plate_number, p.name, p.surname, id.last_date
FROM cars c JOIN
persons p
ON c.owner_ID = p.ID JOIN
insurance_data id
ON c.ID = id.car_ID
ORDER BY c.plate_number, id.last_date DESC;