相同 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
范围内。
我对使用 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
范围内。