Greenplum 4.3:填充缺失值
Posted
技术标签:
【中文标题】Greenplum 4.3:填充缺失值【英文标题】:Greenplum 4.3: Filling Missing values 【发布时间】:2018-04-12 04:29:00 【问题描述】:我正在尝试使用 Greenplum 数据库 4.3.23.0 的 SQL
得到一个表,其中包含类似
的数据ID ID2 Code Type_ID Status y_id Latest_flag
10 10001 205 7 P 114 Y
10 10001 205 7 P 116 NULL
10 10002 205 6 P 116 Y
10 10002 205 6 P 120 Y
期望的输出
ID ID2 Code Type_ID Status y_id Latest_flag
10 10001 205 7 P 114 Y
**10 10001 205 7 P 115 Y**
10 10001 205 7 P 116 NULL
10 10002 205 6 P 116 Y
**10 10002 205 6 P 117 Y**
**10 10002 205 6 P 118 Y
10 10002 205 6 P 119 Y**
10 10002 205 6 P 120 Y
到目前为止尝试的 SQL 查询
with a as
(
select
id,
id2,
generate_series(minAD, maxAD, 1) dt
from (
select
id,
id2,
min(y_id) minAD,
max(y_id) maxAD
from table1
where id in (10)
group by id, id2) a
)
select distinct a.* from (
select
a.id,
a.id2,
a.dt,
code,
type_id,
status,
Latest_flag,
from a
left join (select id,
id2,
y_id,
t1.code,
t1.type_id,
t1.status,
t1.latest_flag
from table1 t1 where latest_flag = 'Y'
) t1 on
t1.id = a.id and t1.id2 = a.id2
and y_id <= dt
order by t1.id, t1.id2, y_id desc) a
输出
ID ID2 Code Type_ID Status y_id Latest_flag
10 10001 205 7 P 114 Y
10 10001 205 7 P 115 Y
**10 10001 205 7 P 116 Y**
10 10002 205 6 P 116 Y
10 10002 205 6 P 117 Y
10 10002 205 6 P 118 Y
10 10002 205 6 P 119 Y
10 10002 205 6 P 120 Y
如果我有一个包含所有 y_id 值且没有丢失数据的 ID,则无需执行任何操作。这必须根据具有 Latest_flag = 'Y' 的潜在客户值填补空白
谢谢
【问题讨论】:
【参考方案1】:你很接近,你可以编写一个子查询来从表中获取latest_flag IS NULL
,然后是LEFT JOIN
Generate_series
CTE。如果子查询的Latest_flag
是NULL
它们将匹配,所以使用CASE WHEN
表达式过滤Latest_flag
。
像这样:
WITH a
AS (SELECT a.*,
Generate_series(minad, maxad, 1) dt
FROM (SELECT id,
id2,
code,
type_id,
status,
Min(y_id) minAD,
Max(y_id) maxAD
FROM table1
WHERE id IN ( 10 )
GROUP BY id,
id2,
code,
type_id,
status) a)
SELECT a.id,
a.id2,
a.code,
a.type_id,
a.status,
dt "y_id",
CASE
WHEN t.id IS NULL
AND t.id2 IS NULL THEN 'Y'
ELSE NULL
END Latest_flag
FROM a
LEFT JOIN (SELECT *
FROM table1
WHERE latest_flag IS NULL) t
ON a.id = t.id
AND a.id2 = t.id2
AND a.dt = t.y_id
sqlfiddle:http://sqlfiddle.com/#!15/05b28/28
【讨论】:
以上是关于Greenplum 4.3:填充缺失值的主要内容,如果未能解决你的问题,请参考以下文章