在 PG 12 数据库中,我有reservations
带有reserved_between
tsrange
列的表。
对于特定的analysis
,我需要知道最后一次预订的结束时间(稍后),并且下面的查询就是这样做的。
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>
识别分析所需的参数在哪里<MYID>
以及在哪里。<MYTAG>
现在,如果没有reservations
,我需要返回 引用的as_early_as
( datetime
) 值。batch
analysis
我认为COALESCE
这可能是这份工作的一个不错的选择。因此,我将查询更新如下。
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>
但是,当我跑步时,我得到
错误:列“batches.as_early_as”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行:...ALESCE(MAX(upper(reservations.reserved_between)), batches.as...
而且我不确定如何解决它,并且文档对我没有太大帮助。
我应该在查询中更改什么?
1 个回答