Я новичок в Postgres, я работал с MySQL.Как выбрать другие поля из строки с MAX значением
Моя проблема проста, она также никогда не бывает в MySQL. t1
- это моя основная таблица, а t2
содержит историю обновлений, которые произошли с полем в t1
, называемом статусом. Поэтому всякий раз, когда запись в t1
изменяет свое поле статуса, новая запись добавляется к t2
с текущей меткой времени и новым значением статуса.
Теперь я хочу получить последний статус и временную метку определенной записи в t1
, например, с идентификатором . Я могу получить последнюю метку времени со следующим запросом.
SELECT
t1.id,
t1.message,
MAX(t2.creation_timestamp)
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.id = t2.table_1_id
WHERE t1.id = 1271
GROUP BY t1.id,t1.message
Но когда я пытаюсь также получить статус этой конкретной строки с меткой времени MAX.
SELECT
t1.id,
t1.message,
t2.status,
MAX(t2.creation_timestamp)
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.id = t2.table_1_id
WHERE t1.id = 1271
GROUP BY t1.id,t1.message
Я получаю следующее сообщение об ошибке:
ERROR: column "t2.status" must appear in the GROUP BY clause or be used in an aggregate function
Как я могу получить статус записи с меткой времени MAX?
Или, может быть, MySQL достаточно умен, чтобы понять, что, поскольку запрос вернет одну строку из агрегата MAX, тогда он вернет другие поля из этого конкретного, если они существуют в select. В любом случае, как это сделать в Postgresql? –
Postgres был бы достаточно умен, если вы определяете правильные первичные и внешние ключи. См. Мой ответ –