Ola pessoal,
Por favor uma ajuda, tenho uma tabela que possui grupos de registros duplicados, por exemplo tenho uma referencia A156 que esta repetida 5x a cada ocorrência se refere a um produto por exemplo: produtoA cor preto valor R$ 10,00, produtoA cor vermelho valor R$ 10,00 etc… , preciso de uma consulta que identifique a duplicação, mas só retorne o primeiro registro de cada grupo.
No link que te passei tem, mas vamos-la
select (colocar aqui os campos) from produto p group by p.referencia having count(p.referencia) > 1
como a cor é diferente, voce nao colocaria ela nos campos
1 curtida
Boa tarde,
Seu filtro (where) tem que conseguir trazer os registros fazendo um COUNT(o_que_vc_precisa)
para fazer a contagem.
Já para pegar apenas uma linha, existem diversas formas: MAX(o_que_vc_precisa)
, FETCH FIRST 1 ROWS ONLY
e por aí vai…
2 curtidas
@Emerzoom reinvenção da roda fazer no where se existe o having justamente para isso! e quando voce usa o group by junto com o having ele ja retorna apenas uma linha.
Eu só mostrei idéias de como fazer.
Não pedi pra reinventar, desinventar, inventalizar. Quem tem que saber se quer inventar alguma coisa é quem está com a dúvida.
Estou no forum desde 2005, já vi gente com dicas de todo tipo. Não creio que o que eu indiquei tivesse algum cunho indicativo de solução definitiva. Mas, Ok, se vc entende assim, por mim, tudo bem.
O que você chama de “identifique a duplicação” ? Será uma coluna extra no resultado dizendo se há ou nao duplicados?
Também, qual é a regra para definir o “primeiro registro de cada grupo”? Por ordem que foi inserido? data? por produto em ordem alfabética?
Eu dei uma pesquisava por algum exemplo visual e consegui esse que, estou certo que vai satisfazer a todos nessa questão:
https://pt.wikihow.com/Excluir-Registros-Duplicados-no-Oracle
Se não for suficiente, continuem mandando as dúvidas para que as pessoas por aqui tentem ajudar de outras formas.
Se executar desta forma irá retornar somente os que não são duplicadas.
Portanto excluindo todos os duplicados. Tem que ser com first, max ou coisas do tipo.