如何在两个表的最小和最大时间戳之间生成序列(Postgresql)
我有两张表,上面有经常更新的天气数据。表A的数据间隔为10分钟,表B的数据间隔为1小时 表A(已实现的天气) 观测时间 温度 17/02/21 00:00 9 17/02/21 00:10 9 17/02/21 00:20 9 17/02/21 00:30 9 ... ... 17/02/21 03:00 9如何在两个表的最小和最大时间戳之间生成序列(Postgresql),postgresql,generate-series,Postgresql,Generate Series,我有两张表,上面有经常更新的天气数据。表A的数据间隔为10分钟,表B的数据间隔为1小时 表A(已实现的天气) 观测时间 温度 17/02/21 00:00 9 17/02/21 00:10 9 17/02/21 00:20 9 17/02/21 00:30 9 ... ... 17/02/21 03:00 9 在我看来,不需要generate_series(): 首先从实现的表中提取每小时的第一条记录。这可以使用DISTINCT ON来完成,它返回一个有序组的第一条记录。这里您的组是小时(使用
在我看来,不需要
generate_series()
:
实现的表中提取每小时的第一条记录。这可以使用DISTINCT ON
来完成,它返回一个有序组的第一条记录。这里您的组是小时(使用date\u trunc()
您可以将hh:10
-hh:50
值转换为加入组的完整小时)
完全联接
:即使没有匹配的时间戳,也会联接表COALESCE()
返回列表中第一个非空值。因此,如果存在实现的温度,则将采用该温度,否则将采用预测温度
嗨,谢谢你!真棒的解释!是的,它解决了这个问题。非常感谢。然而,有时观测到的温度和预报可能会有小的重叠。有没有办法实现这一点,使实现的温度和预测的温度列是连续的?如果数据不连续,则无法为所有数据绘制线图。。。我想它也适用于散点图。:)我不知道该怎么办。我相信,做一些迂回可能会有所帮助。
SELECT
COALESCE(r.observationtime, fc.observationtime) as observationtime, -- 3
r.temperature as realized_temperature,
fc.temperature as forecasted_temperature
FROM (
SELECT DISTINCT ON (date_trunc('hour', observationtime)) -- 1
*
FROM r
ORDER BY date_trunc('hour', observationtime), observationtime
) r
FULL JOIN fc ON r.observationtime = fc.observationtime -- 2
ORDER BY 1