运行一个JOIN语句,该语句排除重复的行

时间:2018-12-19 09:54:42

标签: sql join duplicates amazon-redshift

我有一个重复条目的表(它们具有相同的uid)。

我想通过使用GROUP BY子句从查询结果中删除重复项(其中一项是有效的,但它是随机的。我只能通过rid将其与db2联接来找出值是什么。我正在使用聚合函数(MAX或MIN)保留一行,但是我遇到的问题是我无法选择所需的行,这导致查询中的行数减少。

SELECT
MAX(db1.id) AS id,
FROM db1
LEFT JOIN db2 ON
db1.rid = db2.rid
GROUP BY r.uid

我有什么办法可以解决这个问题?我正在Amazon Redshift上运行查询。

示例:

铅表

id | uid |摆脱
1 | aaa | 111
2 | aaa | 123
3 | bbb | 312

销售表

id |摆脱
1 | 111
2 | 123
3 | 312

leads表具有重复的条目(ID 1和2),因为uid是相同的。我必须删除重复项之一,但是必须为ID 2,因为可以在销售表中找到ID 1(由rid链接)。

3 个答案:

答案 0 :(得分:2)

您可以使用row_number()函数

with cte as
    (
    SELECT *, row_number() over(partition by r.uid order by db1.id desc) as rn
    FROM db1
    LEFT JOIN db2 ON
    db1.rid = db2.rid
    )
delete from cte where rn<>1

答案 1 :(得分:1)

您可以使用不同的

SELECT
distinct db1.id AS id
FROM db1
LEFT JOIN db2 ON
db1.rid = db2.rid

答案 2 :(得分:1)

我认为您想要这样的东西:

select db1.id
from (select db1.*, count(*) over (partition by db1.uid) as cnt
      from db1
     ) db1 left join
     db2
     on db2.rid = db1.rid
where cnt = 1 or cb2.rid is not null;