抑制后续行上的重复值
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
只返回当前行的数量(即一个简单的计数器)。这个计数是根据text
(partition by
子句)的不同值完成的。 row_number
需要一个 order by
子句,因此它知道这些行的计数顺序。因为这里我们不关心哪一行(每个不同的 text
值)先出现,所以我只是按常量 1
排序。
【讨论】:
你能解释一下这到底是做什么的吗?我的意思是 row_number,partition 的作用。以上是关于抑制后续行上的重复值的主要内容,如果未能解决你的问题,请参考以下文章