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