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

PostgreSQL show latest date and one value of a column from many

我有一个查询问题,我无法弄清楚。已经尝试了一段时间,但我就是想不通。如果你能帮助我,那将是很大的帮助。所以...我有 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) 从不FROM 子句中使用逗号。 始终使用正确、明确的JOIN语法。

(2) 使用 table 个别名!

你的问题的答案是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;