【问题标题】:PostgreSQL difference between values with different time stamps in same tablePostgreSQL在同一张表中具有不同时间戳的值之间的差异
【发布时间】:2020-09-24 15:42:57
【问题描述】:

我对使用 PostgreSQL 比较陌生,我可以在这方面寻求一些帮助。

假设我存储了一个预测值表(假设温度),由 dump_date_time 指示。此 dump_date_time 是值存储在表中的日期时间。温度预报也由预报对应的 date_time 指示。假设每 6 小时发布一次预测。

例子:

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

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

【问题讨论】:

    标签: sql postgresql datetime inner-join where-clause


    【解决方案1】:

    一个选项使用连接:

    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
    

    【讨论】:

      【解决方案2】:

      类似:

      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 范围在范围内选择 dump_date_time 的示例。

      【讨论】:

        猜你喜欢
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2016-01-01
        • 1970-01-01
        相关资源
        最近更新 更多