使用 PARTITION BY 和 ROW_NUMBER 时相同的数据,不同的结果
Posted
技术标签:
【中文标题】使用 PARTITION BY 和 ROW_NUMBER 时相同的数据,不同的结果【英文标题】:Same data, different results when using PARTITION BY and ROW_NUMBER 【发布时间】:2016-01-28 10:29:09 【问题描述】:我一直在尝试编写一个脚本来查找重复记录。 但是,这将要求其中一个字段相同,而另一个字段不同。我在我的 SELECT 中使用以下 2 行。
ROW_NUMBER () OVER (PARTITION BY col_1 ORDER BY col_2) AS 'ROWNUMBER',
ROW_NUMBER () OVER (PARTITION BY col_2 ORDER BY col_1) AS 'ROWNUMBER2',
一旦使用了它,我就会从一个 TEMP 表中选择我的结果,其中两列都 > 1。现在这已经使我的结果在一个环境中是正确的,但是在另一个环境中运行相同的脚本时(从周末备份) 我的结果不同。
有人可以向我解释为什么会发生这种情况吗?
非常感谢。
【问题讨论】:
你能显示完整的查询吗?你是说一个查询有效而另一个无效,还是别的什么? 如果您的目标是查找重复项,我可以给您一个有效的查询而不是这个。但如果您的目标是纠正您的方法,请提供您的表格结构,并说明您要达到的目标。 嗨,Haytem,我非常乐意尝试另一种解决方法。这只是我发现的。 您要查找任何重复记录吗?因为您的陈述 “但是,这将要求其中一个字段相同而另一个字段不同” 与此不押韵。重复记录是其中一个字段不同或两者都不同的记录。 可能因为数据不同,结果不同 【参考方案1】:为什么要使用 row_number?这根本没有必要,您应该使用 group by:
SELECT col_1,col_2 from YourTable
group by col_1,col_2 having count(*) > 1
此查询将返回所有重复的行
编辑:如果你有一个第三列,你正在根据它决定谁是一个 dup,你应该这样做:
SELECT col_3 from yourTable
group by col_3 from yourTable having count(*) > 1
【讨论】:
嗨 Sagi,原因是因为我需要第三列,这是我的主键,然后不幸的是它抛出了分组:/ 嗯,那是你的错误,你没有告诉我们你需要做什么。。如果第三列有两个以上的记录,你希望它标记重复?或者?.. 给我们数据样本和预期结果,我会修复我的查询 是的,我希望它标记重复的记录。 请编辑您的帖子并添加输入和期望输出示例以上是关于使用 PARTITION BY 和 ROW_NUMBER 时相同的数据,不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 over 函数中使用 partition by 和 order by?
如何在 Snowflake sql 中使用 partition by 和 order by 计算不同的值?