如何使用函数在PostgreSQL上使用数据间隔填充表

时间:2018-07-06 01:57:30

标签: sql postgresql

我有以下表格:

enter image description here enter image description here

我需要按如下方式创建/填充第三个表:

enter image description here

我画了单元格以便于理解。如果需要拼写需要的内容,则如下所示:

  

在2018-06-05和2018-06-19之间,值为50。

     

在2018-06-19和2018-06-21之间,值为150。

     

在2018-06-21和2018-06-25之间,值为180。

     

在2018-06-25和2018-07-05之间,值为200。

我需要创建一个函数来执行此操作,但我做不到,我花了一整天的时间思考这个问题,但不幸的是我无法设计脚本。

我尝试使用一些update my_table -- case 2: 0,1,0,0,0,0,0,0 set s1 = 0, s2 = 1, s3 = 1, s4 = 0, s5 = 1, s6 = 0, s7 = 1, s8 = 0 where s1 = 0 and s2 = 1 and s3 = 0 and s4 = 0 and s5 = 0 and s6 = 0 and s7 = 0 and s8 = 0; ,但是...没有成功。

enter image description here

1 个答案:

答案 0 :(得分:2)

嗯。我想您可以union all将这些表放在一起,然后使用窗口函数来填写详细信息:

select date as startdate,
       lead(date) over (order by date) as enddate,
       coalesce(newv,
                lead(prev) over (order by date)
               ) as value
from ((select date, null as prev, null as newv
       from table1
      ) union all
      (select dateupdate, prev, newv
       from table2
      )
     ) tt;

这为最后一个日期添加了额外的一行。如果您不希望这样做,则可以通过使用其他子查询并将其过滤掉来删除它。