在整个分区的某个范围内查找缺失值,然后转发填充值?



我希望在一个字段中查找缺少的条目,按两列分组为分区,然后向前填充缺少的条目。

表我有:

England    Q1        1     Dogs
England    Q1        2     Dogs
England    Q1        3     Dogs
Germany    Q1        1     Dogs
Germany    Q2        1     Cats
Germany    Q2        2     Cats
France     Q1        1     Cats
France     Q2        1     Cats

因此,假设我的范围是 1 - 3,对于每个唯一的 [国家][季度] 组合,我希望在 [数字] 列中有一个完整的 1,2,3,[动物] 列向前填充上一个条目。

我想要的表:

England    Q1        1     Dogs
England    Q1        2     Dogs
England    Q1        3     Dogs
Germany    Q1        1     Dogs
Germany    Q1        2     Dogs
Germany    Q1        3     Dogs
Germany    Q2        1     Cats
Germany    Q2        2     Cats
Germany    Q2        3     Cats
France     Q1        1     Cats
France     Q1        2     Cats
France     Q1        3     Cats
France     Q2        1     Cats
France     Q2        2     Cats
France     Q2        3     Cats

如果这没有意义,请告诉我!

使用cross join生成行。 然后使用left join引入一个值和一个窗口函数来填充缺失的值:

select cq.country, cq.quarter, n.number,
max(t.animal) over (partition by cq.country, cq.quarter) as animal
from (select distinct country, quarter from t) cq cross join
(select distinct number from t) n left join
t
on t.country = cq.country and t.quarter = cq.quarter and t.number = q.number;

注意:这确实依赖于表中数字的所有示例。 它很容易使用:

from (select distinct country, quarter from t) cq cross join
(select 1 as number union all
select 2 as number union all
select 3 as number
) n left join
. . .

最新更新