gostaria de uma instrução SQL que numere os duplicados conforme vão entrando, isso indicaria que por exemplo, seria a 2º vez que o registro aparece na minha tabela.
é possivel ?
gostaria de uma instrução SQL que numere os duplicados conforme vão entrando, isso indicaria que por exemplo, seria a 2º vez que o registro aparece na minha tabela.
é possivel ?
Oi, Marlon, tudo bem?
Peço desculpas pela demora em retornar.
Sim, é possível numerar registros duplicados na sua tabela conforme eles vão entrando. Para isso, você pode utilizar a função ROW_NUMBER() do MySQL!
A função ROW_NUMBER() atribui um número sequencial a cada linha de um conjunto de resultados de uma consulta SQL. Essa função pode ser utilizada, por exemplo, para numerar registros duplicados.
Para exemplificar, vamos criar uma tabela de teste e inserir alguns registros duplicados:
CREATE TABLE exemplo (
id INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(50),
sobrenome VARCHAR(50),
PRIMARY KEY (id)
);
INSERT INTO exemplo (nome, sobrenome) VALUES ('João', 'Silva');
INSERT INTO exemplo (nome, sobrenome) VALUES ('Maria', 'Santos');
INSERT INTO exemplo (nome, sobrenome) VALUES ('João', 'Silva');
INSERT INTO exemplo (nome, sobrenome) VALUES ('João', 'Silva');
INSERT INTO exemplo (nome, sobrenome) VALUES ('Pedro', 'Oliveira');
INSERT INTO exemplo (nome, sobrenome) VALUES ('Maria', 'Santos');Observe que, durante a inserção dos dados, adicionamos três pessoas chamadas "João Silva" e duas "Maria Santos". Sabendo disso, podemos construir então a consulta que apresenta as duplicatas:
SELECT id, nome, sobrenome,
ROW_NUMBER() OVER (PARTITION BY nome, sobrenome ORDER BY id) AS duplicata
FROM exemplo;PARTITION BY indica que a numeração será feita considerando a combinação dos valores dos campos nome e sobrenome. ORDER BY indica a ordem de numeração, que será baseada no campo id.ROW_NUMBER() é a função que retornará um número sequencial para cada linha dentro de um grupo definido pela cláusula OVER;OVER é uma cláusula que define a janela de análise da função ROW_NUMBER(). Neste caso em específico, a "janela" será os valores dos campos nome e sobrenome, ordenados pelo id, da tabela exemplo.A partir desse SELECT, teremos o seguinte resultado:
| id | nome | sobrenome | duplicata |
|---|---|---|---|
| 1 | João | Silva | 1 |
| 3 | João | Silva | 2 |
| 4 | João | Silva | 3 |
| 2 | Maria | Santos | 1 |
| 6 | Maria | Santos | 2 |
| 5 | Pedro | Oliveira | 1 |
Olha só! Agora temos uma tabela com todos os registros (duplicados ou não) enumerados conforme a ordem em que foram inseridos!
Marlon, de maneira geral, você pode reorganizar o SELECT que construímos para o que você precisa, sempre analisando coisas como nome da tabela e campos que devem ser levados em consideração para decidir se uma linha está duplicada ou não.
Caso o valor do campo duplicata seja igual a 1, significa dizer que este foi o primeiro registro inserido e, portanto, não haviam outros dados iguais a ele.
Espero ter ajudado. Fico à disposição em caso de dúvidas.
Abraços!