相同 table 中具有不同时间戳的值之间的 PostgreSQL 差异

PostgreSQL difference between values with different time stamps in same table

我对使用 PostgreSQL 比较陌生,我需要一些帮助。

假设我存储了 table 个预测值(比如温度),用 dump_date_time 表示。这个 dump_date_time 是 date_time 时值存储在 table 中。温度预报也由预报对应的 date_time 表示。假设每 6 小时发布一次预报。

示例:

今天 06:00 明天 16:00 的温度发布并存储在 table 中。然后在今天 12:00 发布明天 16:00 的温度并存储在 table 中。我现在对同一个 date_time(16:00 明天)有两个预测,它们在两个不同的时间(06:00 和 12:00 今天)发布,由 dump_date_time.

所有这些值都存储在同一个 table 中,具有三列:dump_date_time、date_time 和值。我的目标是 SELECT 从这个 table 两个预测温度之间的 差异。我该怎么做?

一个选项使用连接:

select date_time, t1.value - t2.value value_diff
from mytable t1
inner join mytable t2 using (date_time)
where t1.dump_date = '2020-01-01 06:00:00'::timestamp
  and t2.dump_date = '2020-01-01 16:00:00'::timestamp

类似于:

create table forecast(dump_date_time timestamptz, date_time timestamptz, value numeric)

insert into forecast values ('09/24/2020 06:00', '09/25/2020 16:00', 50), ('09/24/2020 12:00', '09/25/2020 16:00', 52);

select max(value) - min(value) from forecast where date_time = '09/25/2020 16:00';
 ?column? 
----------
        2

--Specifying dump_date_time range
select 
    max(value) - min(value) 
from 
    forecast 
where 
    date_time = '09/25/2020 16:00' 
and 
    dump_date_time <@ 
    tstzrange(current_date + interval '6 hours', 
              current_date + interval '12 hours', '[]');
 ?column? 
----------
        2

这是一个非常简单的案例。如果您需要其他东西,您将需要提供更多信息。

更新

将使用 timestamptz 范围的示例添加到 select dump_date_time 范围内。