【问题标题】:impute duplicate record id from conditions on other columns sql从其他列sql的条件中估算重复记录ID
【发布时间】:2020-07-28 10:08:51
【问题描述】:

想象一下我有这个数据集:

serial_id | name | address_id | id_duplicates | dob
_______________________________________________________
1         | JOHN | QWERTY     | NULL          | 10/2001
2         | JOHN | QWERTY     | NULL          | 10/2001
3         | JOHN | AZERTY     | NULL          | 10/2001
4         | JOHN | QWERTY     | NULL          | 09/2001
5         | MARY | QWERTY     | NULL          | 10/2001
6         | MARY | AZERTY     | NULL          | 10/2001
7         | MARY | AZERTY     | NULL          | 10/2001

当记录在某些条件下匹配时,我想用serial_id任何 填充id_duplicates

如果我希望与 nameaddress_iddob 具有相同匹配的记录共享 serial_id 列中的单个 id,例如,我会:

serial_id | name | address_id | id_duplicates | dob
_______________________________________________________
1         | JOHN | QWERTY     | 1             | 10/2001  --> match
2         | JOHN | QWERTY     | 1             | 10/2001  --> match
3         | JOHN | AZERTY     | 3             | 10/2001  --> no match on address_id
4         | JOHN | QWERTY     | 4             | 09/2001  --> no match on dob
5         | MARY | QWERTY     | 5             | 10/2001  --> no match on name
6         | MARY | AZERTY     | 6             | 10/2001  --> match 
7         | MARY | AZERTY     | 6             | 10/2001  --> match

我一直在痛苦地尝试使用嵌套查询来做到这一点,因为它们毫无意义,所以我很不好意思发布......

任何帮助将不胜感激!

【问题讨论】:

    标签: sql postgresql duplicates subquery imputation


    【解决方案1】:

    你可以使用dense_rank():

    select t.*,
           dense_rank() over (order by name, address, dob) as id_duplicate
    from t;
    

    如果你想在update 中使用这个,这里有一种方法:

    update t
        set id_duplicate = tt.new_id_duplicate
        from (select t.*, 
                     dense_rank() over (order by name, address, dob) as new_id_duplicate
              from t
             ) tt
        where tt.serial_id = t.serial_id;
    

    【讨论】:

    • 我收到Query Error: error: column reference "id_duplicate" is ambiguous。这是fiddle
    • 它起作用了——我只是将as id_duplicate 重命名为其他名称。非常感谢。
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多