demo: db <> fiddle
SELECT DISTINCT
to_char(qdate, 'MON'),
facility,
idquestion,
first_value(value) OVER (PARTITION BY facility, idquestion ORDER BY qdate DESC) as value
FROM questions
ORDER BY facility, idquestion
Использование оконных функций :
first_value(value) OVER ...
дает вам первоезначение оконной рамы.Кадр представляет собой группу facility
и idquestion
.Внутри этой группы строки упорядочены по дате DESC.Таким образом, самое последнее значение является первым, независимо от того, какая дата DISTINCT
отфильтровала связанные значения (например, есть два значения для facility == 1
и idquestion == 7
)
Обратите внимание:
«дата» - это зарезервированное слово в Postgres.Я настоятельно рекомендую переименовать вашу колонку, чтобы избежать определенных проблем.Кроме того, в Postgres строчные буквы используются и рекомендуется.