2016-10-14 3 views
0

У меня проблема с запросом, который я не могу понять. Попробовали в течение некоторого времени, но я просто не могу понять это. Было бы очень полезно помочь, если бы вы могли мне помочь. Так что ... У меня есть 4 таблицы:PostgreSQL показывает последнюю дату и одно значение столбца из многих

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

(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; 
+0

Спасибо, это сработало. Я буду помнить о ваших предложениях. – screw4445