我需要创建一个视图,对于前两个表(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
有人知道如何做到这一点吗?
发布于 2013-07-31 05:00:32
我的sql非常生疏,所以我觉得有一种更好的方法,但我想出的方法是针对一个子选择--即table_b的一个自联接--来创建一个新的表b,其中包含日期范围。这样,就很容易将table_a与适当的值相匹配。
我在木琴上留下了一个测试,这样您就可以看到我所做的假设。以下代码如下:
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.endself join通过组调整额外的b2条目,并取大于b1日期的最小b2日期。在最后一个条目中,没有更大的b2日期,因此它最终为null;我映射到12/31/9999是一个非常大的日期。
https://stackoverflow.com/questions/17961052
复制相似问题