【问题标题】:SQL Teradata - mark duplicate records in the columnSQL Teradata - 在列中标记重复记录
【发布时间】:2020-01-29 16:13:38
【问题描述】:

所以我知道如何识别重复行,但现在还需要识别与其链接的行并将其标记为重复。 例如:

Row     Name    ID  State   Date    Dup
---------------------------------------
001     Jim     001 NJ      jan2020 
002     Jim     001 NJ      jan2020
003     Tan     002 NY      feb2020
004     Allen   003 CA      Feb2020

输出应该是:

Row     Name    ID  State   Date    Dup
---------------------------------------
001     Jim     001 NJ      jan2020 Y
002     Jim     001 NJ      jan2020 Y
003     Tan     002 NY      feb2020 N
004     Allen   003 CA      Feb2020 N

我可以使用row_number 使用分区,但它不会将记录001 标记为Y。有什么办法?

【问题讨论】:

    标签: duplicates teradata


    【解决方案1】:

    如果你有少量的列,你可以这样做:

    SELECT Row, Name, ID, State, Date, 
      CASE 
        WHEN COUNT(*) OVER(PARTITION BY Name, ID, State, Date) > 1 THEN 'Y' 
        ELSE 'N' 
      END AS Dup
    FROM MyTable
    

    这会根据PARTITION BY 表达式中指定的列将给定行标记为重复行。此外,请注意您的列名(即Row, Date),因为它们可能是保留字。

    【讨论】:

    • @raviolli,谢谢!但列名只是指示性的,而不是实际名称。就像我提到的那样,分区只会将第 1 行标记为 dup。我找到了一种方法,我们可以简单地使用子查询来获取重复数据并使用它来标记所有记录
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多