Por fin luego de tanto luchar pudimos hallar la contestación de este rompecabezas que ciertos lectores de nuestro espacio tienen. Si tienes algo más que aportar puedes compartir tu información.
Solución:
La idea básica será usar una consulta anidada con agregación de conteo:
select * from yourTable ou
where (select count(*) from yourTable inr
where inr.sid = ou.sid) > 1
Puede ajustar la cláusula where en la consulta interna para acotar la búsqueda.
Hay otra buena solución para lo mencionado en los comentarios (pero no todos los leen):
select Column1, Column2, count(*)
from yourTable
group by Column1, Column2
HAVING count(*) > 1
O más corto:
SELECT (yourTable.*)::text, count(*)
FROM yourTable
GROUP BY yourTable.*
HAVING count(*) > 1
Desde “Buscar filas duplicadas con PostgreSQL”, aquí hay una solución inteligente:
select * from (
SELECT id,
ROW_NUMBER() OVER(PARTITION BY column1, column2 ORDER BY id asc) AS Row
FROM tbl
) dups
where
dups.Row > 1
Para hacerlo más fácil, asumo que desea aplicar una restricción única solo para el año de la columna y el primario. key es una columna llamada id.
Para encontrar valores duplicados, debe ejecutar,
SELECT year, COUNT(id)
FROM YOUR_TABLE
GROUP BY year
HAVING COUNT(id) > 1
ORDER BY COUNT(id);
Usando la instrucción sql anterior, obtiene una tabla que contiene todos los años duplicados en su tabla. En orden para eliminar todos los duplicados excepto la última entrada duplicada debe usar la instrucción sql anterior.
DELETE
FROM YOUR_TABLE A USING YOUR_TABLE_AGAIN B
WHERE A.year=B.year AND A.id
Aquí tienes las comentarios y puntuaciones
Si posees algún titubeo y disposición de afinar nuestro tutorial eres capaz de dejar un exégesis y con gusto lo analizaremos.