PostgreSQL显示最新日期和许多列的一个值

时间:2016-10-14 21:06:09

标签: sql postgresql greatest-n-per-group

我的查询有问题,我无法弄明白。已经尝试了一段时间,但我无法弄明白。如果你可以帮助我,那将是一个很大的帮助。所以...我有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

输出车牌号码,车主和车辆保险的最后日期。但问题是,有两辆汽车有两个保险结束日期,所以在输出中有两个相同的汽车条目和两个保险结束日期。我需要的是每辆车只有一个条目,相应的保险结束日期应该是最新的。

我知道这是非常基本的,但我是数据库的第一年学生,这是我的第一个任务之一。提前致谢

1 个答案:

答案 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;