在我打电话给Ghost Busters之前我来这里试试技术哈哈,
好吧,我的Postgre数据库中有一张表有284814条记录,我一直在查找重复记录,这个统计数据
select grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, count(numero)
from conhecimento
group by grupo, empresa, filial, unidade, diferenciadornumero, serie, numero
having count(numero) > 1
它给我回复了五条记录:
1;1;9;1;2;9;24712;2
1;1;9;1;2;9;24708;2
1;1;9;1;2;9;24711;2
1;1;9;1;2;9;24713;2
1;1;9;1;2;9;24709;2
之后,我尝试使用复合键逐个查看此记录,使用此结果:
select grupo, empresa, filial, unidade, diferenciadornumero, serie,
numero, ctid
from conhecimento
where grupo = 1 and empresa = 1 and
filial = 9 and unidade = 1 and diferenciadornumero = 2 and serie = 9 and
numero = 24712
令我惊讶的是,这个查询只返回一条记录,
1; 1; 9; 1; 2; 9; 24712;(7986,5)
所以,现在我想了解Postgre如何告诉我在这5条记录中有重复记录,但是当我试图从表中恢复这些记录时,只返回一行,
我已经使用了这个查询
select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
ROW_NUMBER() OVER (PARTITION BY grupo, empresa, filial, unidade,
diferenciadornumero, serie, numero
) AS Row
FROM conhecimento
) dups
where dups.Row > 1
但没有运气,有人知道发生了什么事吗?
这是我的密钥grupo, empresa, filial ,unidade, diferenciadornumero, serie, numero
的组成。我的表格是conhecimento
我最好的问候
答案 0 :(得分:1)
这可能不是答案,但是。 。
代码:
select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
ROW_NUMBER() OVER (PARTITION BY grupo, empresa, filial, unidade,
diferenciadornumero, serie, numero
) AS Row
FROM conhecimento
) dups
where dups.Row > 1
仅返回每条记录的第二个示例。您实际上并不想要row_number()
,而是希望count()
:
select *
from (SELECT grupo, empresa, filial, unidade, diferenciadornumero, serie, numero, ctid,
count(*) OVER (PARTITION BY grupo, empresa, filial, unidade,
diferenciadornumero, serie, numero
) AS cnt
FROM conhecimento
) dups
where dups.cnt > 1;