如何在保留正确顺序的同时在 Postgres 中使用多个不同的 on 语句

How to use multiple distinct on statements in Postgres while retaining the correct order

我有一个 table 的 Postgres 天气预报,看起来像这样

在这里,每 15 分钟同时发布一次风能和太阳能预报。我希望 select 使用 distinct on() 语句从这个 table 获得最新的风能和太阳能预报。但是,当我仅在 time 列上使用它时,它会删除风力预报,因为该预报在太阳能预报前一分钟被丢弃。我试过使用 distinct on(time, forecast) 但不知何故订单被搞乱了,我不再接受最新的 dump_date (见下文)

如何在多个列上使用 distinct on() 语句同时仍保留顺序?我现在使用的查询是

select
    distinct on ("time", "forecast") *
from table
order by "time"

此查询保持动态很重要,因此对 dump_date 进行硬编码对我来说不是一个选项。

我会将 dump_date DESC 添加到 ORDER

SELECT DISTINCT ON (time, forecast)
    *
FROM t
ORDER BY time, forecast, dump_date DESC