Netezza 中具有重复数据的棘手范围查找
Posted
技术标签:
【中文标题】Netezza 中具有重复数据的棘手范围查找【英文标题】:Tricky Range lookup in Netezza with duplicate data 【发布时间】:2021-03-15 07:49:42 【问题描述】:以下是我需要在 Netezza SQL 中解决此问题的方案。
如果您查看下面的输入第二条记录,第二列是空的,但我需要“H”记录上方的值形式。第二行的预期将是“A,CP,2”。与第 4 行相同,我需要来自第 3 条记录“H”的值,因此预期为“E,SP,4”
输入数据
H,CP,1
A,,2
H,SP,3
E,,4
H,,5
C,,6
输出:
H,CP,1
A,CP,2
H,SP,3
E,SP,4
H,,5
C,,6
第二个输入示例: 输入
c1,c2,c3
H,P,1
H,Q,2
E,,3
A,,4
H,R,5
A,,6
C,,7
H,,8
E,,9
H,S,10
输出
H,P,1
H,Q,2
E,Q,3
A,Q,4
H,R,5
A,R,6
C,R,7
H,,8
E,,9
H,S,10
【问题讨论】:
到目前为止你做了什么工作? 嗨,Sorin,我不擅长 SQL,但我是一名 ETL 开发人员。我曾尝试在工具中分离 H 和非 H 记录并尝试范围查找,但如果我有 SQL 来执行此操作,这对我来说很容易。因为我每天要处理 300 万条记录,所以工具性能很差。 请考虑重新表述您的问题,因为您的问题非常不清楚。提示:***.com/help/how-to-ask 嗨,Sorin,我已经给出了明确的例子,请你检查一下它是否好。 【参考方案1】:我从你的例子中假设
-
您只能有一个或两行带有给定“字母”的行
只有中间列有时为 NULL?
我进一步假设 3)该表称为TAB 4) 并且有 3 列名为 C1,C2,C3
在这种情况下,这应该涵盖它:
Select a.C1, nvl(a.C2,b.C2), a.C3
From TAB a
Left Join TAB b
Using (C1)
【讨论】:
嗨,输入可能有许多“H”记录和非“H”记录,如下所示。基本上我需要的是在col1和下一个'H'记录中找到第一个'H',并在这些'H'记录之间将第一个'H'在c2列中的内容传播到非'H'记录。无需更新“H”记录。如果不清楚,请告诉我,我会举更多例子。输入 ----- c1,c2,c3 -------- H,P,1 H,Q,2 E,,3 A,,4 H,R,5 A,,6 C,,7 H,,8 E,,9 H,S,10 输出 ----- H,P,1 H,Q,2 E,Q,3 A,Q,4 H,R,5 A,R,6 C ,R,7 H,,8 E,,9 H,S,10 我没有在第二个示例中得到 C,R,7 行,从您的第一个示例中,看起来您只想将其向前推进一步。为什么在第一个示例中不是 H、SP、5? 嗨,Lars,我需要将上面的 H 记录继续下去,直到找到下一个 H。在我的第二个示例中,如果您考虑行号 5、6、7 和 8。这里我需要填补空白在第 5 行和第 8 行之间,这意味着第 6 行和第 7 行将填充第 5 行的第二列值,如此处和示例中所示。 H,R,5 A,R,6 C,R,7 H,,8 好吧,让我重复一遍:'H'有特殊含义,所以只要'later'记录也有'H',你希望将前一个'H'记录中的C2值向前传递只要它们之间的值为NULL? 是的,我只想为非 H 记录携带 C2,大多数记录只有空值或空格。只需取上一个 H C2 并传递它,直到找到下一个 H 但为下一个 H 记录。以上是关于Netezza 中具有重复数据的棘手范围查找的主要内容,如果未能解决你的问题,请参考以下文章