我有以下表格:
我需要按如下方式创建/填充第三个表:
我画了单元格以便于理解。如果需要拼写需要的内容,则如下所示:
在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;
,但是...没有成功。
答案 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;
这为最后一个日期添加了额外的一行。如果您不希望这样做,则可以通过使用其他子查询并将其过滤掉来删除它。