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 中具有重复数据的棘手范围查找的主要内容,如果未能解决你的问题,请参考以下文章

Jquery查找具有特定数据属性的元素[重复]

C#函数查找两个数字的增量[重复]

无法从 Netezza 表中删除重复数据

从 Netezza 表中删除重复项

棘手的算法问题[重复]

查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O