在 Google Bigquery 中仅使用 ROW_NUMBER() 查找重复记录

问题描述 投票:0回答:1

对链接图像表示歉意 - 我无法将它们粘贴到文本正文中......

我想查找重复的“name_org1”记录 - 没有唯一的记录。我正在 Google Bigquery 中操作。

为此,我决定使用 ROW_NUMBER() 窗口函数对所有记录进行排名,并按顺序对重复项进行排名。一切似乎都有效,除了我无法过滤掉唯一的记录。换句话说,我希望我的数据集仅包含连续的排名(1,2,或 1,2,3,或 1,2,3,4 等)。

我不想要任何一对一的(即每行都有唯一的记录)。似乎无法弄清楚如何排除这些。尝试过使用 ChatGPT 但我不满意。

这是迄今为止我的查询,它产生了我正在寻找的重复项,但也包括唯一的记录:

SELECT
partner, name_org1, 
  ROW_NUMBER() OVER(PARTITION BY name_org1) as duplicates
FROM `gcp-gfs-datalake-core-prd.sap_p05__saphanadb__views_current.but000`

这是我希望数据集看起来像这样的示例:Duplicate Records

这是我不希望我的数据集包含的内容:Unique one-to-one Records

我觉得我已经用尽了我知道如何使用的大部分选项,包括使用 CTE 或聚合,但我现在不知所措。

感谢您的帮助。

sql google-bigquery row-number
1个回答
0
投票

看起来你需要

COUNT(*)
窗口功能

SELECT
  b.partner,
  b.name_org1
FROM (
    SELECT *,
      COUNT(*) OVER (PARTITION BY name_org1) as count
    FROM `gcp-gfs-datalake-core-prd.sap_p05__saphanadb__views_current.but000` b
) b
WHERE b.count > 1;
© www.soinside.com 2019 - 2024. All rights reserved.