首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询以在Postgres中完成表上的空空间

查询以在Postgres中完成表上的空空间
EN

Stack Overflow用户
提问于 2013-07-31 03:25:04
回答 1查看 180关注 0票数 0

我需要创建一个视图,对于前两个表(A和B),我得到的结果如表C所示。

基本上,我需要填充表B上的空空间,使用前面可用的第一个值,如下所示。

我已经在一个过程中使用了两个循环来完成这个任务,但是我想尝试一个解决方案,只使用selects语句。

table_a

日期

2013年1月1日

2013年1月2日

2013年1月3日

2013年1月4日

2013年1月5日

2013年1月6日

2013年1月7日

2013年1月8日

2013年1月9日

2013年1月10日

……

table_b

日期值

2013年1月1日10

2013年1月3日5

7/1/2013

2013年1月10日40

table_c -期望结果

日期值

2013年1月1日10

2013年1月2日10

2013年1月3日5

2013年1月4日5

2013年1月5日5

2013年1月6日5

7/1/2013

8/1/2013

9/1/2013 30

2013年1月10日40

有人知道如何做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 05:00:32

我的sql非常生疏,所以我觉得有一种更好的方法,但我想出的方法是针对一个子选择--即table_b的一个自联接--来创建一个新的表b,其中包含日期范围。这样,就很容易将table_a与适当的值相匹配。

我在木琴上留下了一个测试,这样您就可以看到我所做的假设。以下代码如下:

代码语言:javascript
复制
select date_format(a.date,'%m/%d/%Y') as date, b.value as value 
from table_a as a join 
    (select b1.date as start, IFNULL(min(b2.date),'9999-12-31') as end, b1.value as value
            from table_b as b1 left outer join table_b as b2
            on b1.date < b2.date
            group by b1.date) as b
on a.date >= b.start and a.date < b.end

self join通过组调整额外的b2条目,并取大于b1日期的最小b2日期。在最后一个条目中,没有更大的b2日期,因此它最终为null;我映射到12/31/9999是一个非常大的日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17961052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档