gpt4 book ai didi

sql - PostgreSQL:用以前的值填充时间序列查询中的 NULL 值

转载 作者:行者123 更新时间:2023-11-29 11:21:29 25 4
gpt4 key购买 nike

我有一个包含时间相关信息的数据库。我想要一个包含每分钟值的列表。像这样:

12:00:00  3
12:01:00 4
12:02:00 5
12:03:00 5
12:04:00 5
12:05:00 3

但是当几分钟没有数据时,我得到了这样的结果:

12:00:00  3
12:01:00 4
12:02:00 5
12:03:00 NULL
12:04:00 NULL
12:05:00 3

我想用之前的 NOT NULL 值填充 NULL 值。

此查询为每一分钟创建一个时间序列。然后它将此连接到我数据库中的数据。

我读了一些关于用之前的 NOT NULL 值填充 NULL 值的窗口函数,但我不知道如何在这个查询中实现它。有人能把我推向好的方向吗?

我尝试了这个解决方案,但 NULL 值仍然存在: PostgreSQL use value from previous row if missing

这是我的查询:

SELECT
date,
close
FROM generate_series(
'2017-11-01 09:00'::timestamp,
'2017-11-01 23:59'::timestamp,
'1 minute') AS date
LEFT OUTER JOIN
(SELECT
date_trunc('minute', market_summary."timestamp") as day,
LAST(current, timestamp) AS close
FROM market_summary
WHERE created_at >= '2017-11-01 09:00'
AND created_at < '2017-11-01 23:59'
GROUP BY day
) results
ON (date = results.day)
ORDER BY date

最佳答案

我发现以下方法更简单:

创建给定的数据样本:

WITH example (date,close) AS 
(VALUES
('12:00:00',3),
('12:00:01',4),
('12:00:02',5),
('12:00:03',NULL),
('12:00:04',NULL),
('12:00:05',3)
)
SELECT * INTO temporary table market_summary FROM example;

查询用之前填充的值填充NULL值

select 
date,
close,
first_value(close) over (partition by grp_close) as corrected_close
from (
select date, close,
sum(case when close is not null then 1 end) over (order by date) as grp_close
from market_summary
) t

返回

date      | close | corrected_close
-----------------------------------
12:00:00 | 3 | 3
12:01:00 | 4 | 4
12:02:00 | 5 | 5
12:03:00 | NULL | 5
12:04:00 | NULL | 5
12:05:00 | 3 | 3
  • 关闭:现有值(value)
  • corrected_close:修正值

关于sql - PostgreSQL:用以前的值填充时间序列查询中的 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com