Removendo registros duplicados em uma tabela

Muitas vezes nos deparamos com a necessidade de remover registros duplicados em uma determinada tabela do Banco de Dados. No caso que vou compartilhar com vocês comparamos os registros mantendo apenas o registro mais antigo na base.

Considerando

SCHEMA_NAME: Nome do seu Schema no banco de dados;
TABLE_NAME: Nome da tabela onde temos os registros duplicados;
CAMPO_A_TIMESTAMP: Campo (DATE ou TIMESTAMP) que iremos utilizar de parâmetro para verificar qual o registro mais antigo;
CHAVE: Campo que indica o numero do registro duplicado (código do produto, numero do incidente, …);

Temo o seguinte SQL

DELETE
FROM <strong>SCHEMA_NAME</strong>.<strong>TABLE_NAME</strong> A
WHERE
<strong>CAMPO_A_TIMESTAMP</strong> &gt;
(SELECT MIN(<strong>CAMPO_A_TIMESTAMP</strong>)
FROM <strong>SCHEMA_NAME</strong>.<strong>TABLE_NAME</strong> B
WHERE A.<strong>CHAVE</strong> = B.<strong>CHAVE</strong>)

Espero que a dica tenha sido útil, caso tenham alguma dúvida é só deixar um comentário. Obrigado.

Concatenação de valores no Banco de Dados

Muitas vezes nos deparamos com situações onde precisamos concatenar valores em nossas SQL queries, e hoje irei ensinar como realizar essa atividade nos DB’s MySQL e IBM DB2.

Possuímos duas formas de realizar essa atividade, utilizando a função CONCAT() (presente em ambos os DB’s) e através do carácter “pipe”.

CONCAT();
No MySQL a função CONCAT() retorna a string resultante da concatenação dos argumentos, sendo que o DB aceita um ou mais argumentos. Se todos os argumentos são strings não-binários, o resultado é uma string não binários. Se os argumentos incluirem quaisquer strings binárias, o resultado é uma string binária. Um argumento numérico é convertido na sua forma equivalente binário string;
Exemplo:

mysql&gt; SELECT CONCAT('My', 'S', 'QL');
-&gt; 'MySQL'

Já no IBM DB2 a função retorna a concatenação de dois argumentos de cadeia sendo que os dois argumentos devem ser de tipos compatíveis (tabela de compatibilidade). O resultado da função é uma string cujo comprimento é igual à soma dos comprimentos dos dois argumentos.
Exemplo: 

CONCAT(string-expression-1,string-expression-2)

DB2&gt; SELECT CONCAT('IBM ','DB2') FROM TBL_TESTE;
-&gt;'IBM DB2'

Carácter “pipe” ||

Em ambos os DB’s você utilizar uma sequencia de dois caracteres | (pipe) para obter a concatenação dos valores:

DB&gt;SELECT 'Artigo' ||' - '||'primeiro '|| db_campo || ' fim';
-&gt; 'Artigo - primeiro <strong>valor do db_campo</strong> fim'

Com o ‘||’ é possível concatenar diversos valores de uma vez só (mesmo no IBM DB2).

Links úteis: