如何使用给定月份中先前已知出现条目的值填充表?
Posted
技术标签:
【中文标题】如何使用给定月份中先前已知出现条目的值填充表?【英文标题】:How to populate a table with values from the previous known occurrence entry in a given month? 【发布时间】:2020-11-24 17:43:55 【问题描述】:我有如下 sn-p 所示的表格,其中包含以下数据。每行有两个键 "IDENTIFIER" , "NEW IDENTIFIER" 组合,用于输入月份,并适当填充其他字段。对于每个 a1 (IDENTIFIER),给定月份可能有多个 s1,s2 ( NEW IDENTIFIER )。
预期的转换表
对于 (a1,s1),(a1,s2),(a2,s4) 的每个组合,从第一个发生日期开始,新表中应该有一个对应的条目,用于 2020 年的所有缺失月份,即如果组合从 3 月开始 - 那么输出应该包含从 3 月到 12 月的条目。
除了在生成新的组合条目字段“FIRST NAME”时,应根据条目月份从原始表中的最后一个已知条目推断/复制“LAST NAME”。
在下面的示例/图片中,您可以发现对于 (a1,s1) => april 的新条目的组合,可能具有与 March 条目相同的值,而 july 条目是从原始表中先前已知的条目月份填充的,即 6 月和同样,从 8 月开始,9 月、10 月、11 月、12 月的人口都会增加。
【问题讨论】:
【参考方案1】:交叉连接会创建所有要填充的组合,相关的子查询会找到要填充的内容:
create or replace temp table sparse
as
select '1' id1, 'a' id2, 'james' name1, 'wood' name2, '2002-01-01'::date month
union all select 1,'a','joyce','flowers', '2002-06-01'
union all select 1,'a','pat','strings', '2002-08-01'
;
with months as (
select date_from_parts(2002, seq8()+1, 1) month
from table(generator(rowcount => 12))
), months_ids as (
select *
from months
cross join (select distinct id1, id2 from sparse)
)
select *
, (select array_agg(name1) within group (order by month desc) from sparse where a.month>=month and a.id1=id1 and a.id2=id2)[0]::string name1
, (select array_agg(name2) within group (order by month desc) from sparse where a.month>=month and a.id1=id1 and a.id2=id2)[0]::string name2
from months_ids a
order by month
开头:
结尾:
【讨论】:
以上是关于如何使用给定月份中先前已知出现条目的值填充表?的主要内容,如果未能解决你的问题,请参考以下文章