Em um banco de dados PG 12 tenho a reservations
tabela com a reserved_between
tsrange
coluna.
Para um específico analysis
, preciso saber o final da última reserva (mais tarde) e a consulta a seguir faz exatamente isso.
SELECT MAX(upper(reservations.reserved_between))
FROM dev.reservations
JOIN dev.analyses ON reservations.analysis_id = analyses.id
JOIN dev.analytical_tests ON analyses.analytical_test_id = analytical_tests.id
WHERE analytical_tests.specification_id = <MYID>
AND analytical_tests.tag = <MYTAG>
Onde <MYID>
e <MYTAG>
são os parâmetros necessários para identificar a análise.
Agora, caso haja um não reservations
, preciso retornar o valor as_early_as
( datetime
) da batch
referência analysis
.
Acho que COALESCE
poderia ser uma boa opção para o trabalho. Assim, atualizei a consulta da seguinte forma.
SELECT COALESCE(MAX(upper(reservations.reserved_between)), batches.as_early_as)
FROM dev.reservations
JOIN dev.analyses ON reservations.analysis_id = analyses.id
JOIN dev.analytical_tests ON analyses.analytical_test_id = analytical_tests.id
JOIN dev.batches ON analyses.batch_id = batches.id
WHERE analytical_tests.specification_id = <MYID>
AND analytical_tests.tag = <MYTAG>
No entanto, quando eu corro eu recebo
ERRO: a coluna "batches.as_early_as" deve aparecer na cláusula GROUP BY ou ser usada em uma função agregada LINE 1: ...ALESCE(MAX(upper(reservations.reserved_between)), batches.as...
E não tenho certeza de como corrigi-lo e a documentação não me ajuda muito.
O que devo alterar na minha consulta?
1 respostas