我有一个包含重复条目的表(它们具有相同的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
我能做些什么来解决这个问题吗?我正在亚马逊Redshift上运行查询。
示例:
潜在客户表
id|uid|rid
1|aaa|111
2|aaa|123
3|bbb|312
销售表
id | rid
1 | 111
2 | 123
3 | 312
leads表有一个重复的条目(ID 1和2(,因为uid是相同的。我必须删除其中一个重复项,但必须是ID 2,因为ID 1可以在销售表中找到(通过rid链接(。
您可以使用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
我想你想要这样的东西:
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;
您可以使用不同的
SELECT
distinct db1.id AS id
FROM db1
LEFT JOIN db2 ON
db1.rid = db2.rid