抑制后续行上的重复值

Posted

技术标签:

【中文标题】抑制后续行上的重复值【英文标题】:Suppress repeating values on subsequent rows 【发布时间】:2014-10-17 12:35:15 【问题描述】:
item_no parent   item_no_child   item_name   text
123                3              xxx       the item is resistant to water
123                5              yyy       The item is resistant to heat
123                6              zzz       The item is ....

我将给出父 item_no 作为输入并检索子项目编号。现在我必须检查每个子项目的文本,如果它们有相同的文本,我不应该显示 item_name 否则我应该。

【问题讨论】:

查找LAG函数 【参考方案1】:

row_number() 分析函数是实现此类不同查询的一种巧妙方法:

SELECT item_name
FROM   (SELECT item_name,
               ROW_NUMBER() OVER (PARTITION BY text ORDER BY 1) AS rn
        FROM   items
        WHERE  item_no parent = 123)
WHERE  rn = 1

编辑: 按照 cmets 的要求进行一些解释 - row_number 是一个分析函数(有时也称为窗口函数)。它每行输入返回一个结果(如行函数),但也考虑所有其他行(如聚合函数)。在这种情况下,row_number 只返回当前行的数量(即一个简单的计数器)。这个计数是根据textpartition by 子句)的不同值完成的。 row_number 需要一个 order by 子句,因此它知道这些行的计数顺序。因为这里我们不关心哪一行(每个不同的 text 值)先出现,所以我只是按常量 1 排序。

【讨论】:

你能解释一下这到底是做什么的吗?我的意思是 row_number,partition 的作用。

以上是关于抑制后续行上的重复值的主要内容,如果未能解决你的问题,请参考以下文章

使用行上的部分字符串匹配返回DataFrame项pandas python [重复]

仅将熊猫值复制到字典:抑制索引 [重复]

SQL查询 - 如何抑制结果集中的重复值?

从行上的单元格值添加前缀

在熊猫切片上设置值的正确方法[重复]

避免 JMS/ActiveMQ 上的重复消息