![]() |
Resultado de consulta evitando duplicados de ciertos registros
Hola a todos, después de buscar un rato (quizás no he sabido buscar bien) no he encontrado ningún hilo que me saque de la duda.
Resulta que en una tabla de registros hay un campo que almacena una referencia y esta se puede repetir en varios registros. Necesito una consulta que me devuelva sólo un registro (con todos sus campos) de cada valor diferente del campo referencia; intuyo que se utiliza el atributo distinct pero he hecho pruebas y no acierto. También me vale una solución que teniendo en un ClientDataSet todos los datos, pueda realizar un filtrado y me quede con los registros que cumplan la condición mencionada antes, que muestre un registro por cada valor del campo referencia. Gracias de antemano por vuestro tiempo y ayuda. Sergio |
Cita:
Y explica qué quiere decir con "no acierto", ¿en qué no aciertas? |
Bien, en la tabla lo que tengo es esto:
Código:
id. referencia campo1 campo2... Dados estos datos, me interesa una consulta tal que al aplicarla, me quede con los registros en los que no se repita el campo referencia, como en este caso: Código:
id. referencia campo1 campo2... He probado algo así como:
pero no ha funcionado. O también me interesa que a la hora de filtrar los datos en la aplicación, en el evento OnFilterRecord, haga lo mismo pero no encuentro la forma. A ver si alguien me echa una mano, gracias. Sergio |
Puedes provar algo del tipo:
select * from tabla t1 where ((select count(*) from tabla t2 where t1.referenca=t2.referencia)<2 ) |
Hola.
Yo no soy experto en sql pero prueba a añadir a tu instrucción la cláusula "GROUP BY REFERENCIA" Saludos |
Creo que esta es la consulta que quieres:
|
Cita:
![]() Gracias :) Cita:
El "problema" es que aunque se ponga distinct, al añadir el asterisco para el resto de campos, finalmente se trae todos, por eso hay que agrupar por ese campo "referencia". En este caso no hace falta hacer un distinct, solamente es necesario agrupar:
|
Cita:
Me devolvería esto: Código:
id. referencia campo1 campo2... Código:
select distinct a.referencia, count(a.referencia) Sin embargo si añado a la sentencia select todos los demás campos no funciona: Código:
select distinct a.referencia, count(a.referencia), a.* |
Cita:
Por otro lado quería aclarar a casimiro que la consulta
pide a gritos un campo por el cual agrupar y daría error. Si no encuentro otra consulta sin anidaciones, cosa que creo sería imposible, pues me quedo con la de duilioisola que es la que me soluciona el problema. Gracias a todos por vuestro tiempo y aportaciones. Sergio J. |
Cita:
prueba esto
Con esta consulta tendria que retornar lo que quieres |
Primero disculparme por no haber leido bien la pregunta y no darme cuenta de que necesitabas también una ocurrencia para cada registro repetido. Segundo seguir discupandome, esta vez por la omisión del tag sql y por haber escrito prueva en lugar de prueba, cuando quise editar para corregir ya no era posible.
Ahora la aportación que igual te sirve. Puede que con esta consulta obtengas lo que necesites con la velocidad que te gustaría:
|
Gracias de nuevo a todos, con todas estas últimas consultas, ya sólo me queda elegir la más eficiente porque funcionan todas.
Un saludo Sergio |
Tema solucionado
|
Cita:
|
Bueno, la consulta que ha prevalecido a las demás es la siguiente de aposi:
...a pesar de ser anidada, se ejecuta rápido y el resultado es exactamente el esperado. Gracias a todos, de verdad. Sergio J. |
Una pequeña nota sobre la consulta:
Dependiendo de los índices (ascendente, descendente) probablemente la consulta mejore si pones max(id). Obviamente el registro será del último id y no del primero. Si no te importe cuál de los registros salga, puedes probar con FIRST 1 id. Esto te seleccionará uno de los registros, pero no te asegura cual de todos. Se lo supone más óptimo porque en cuanto encuentra 1 deja de buscar. En los otros casos debe buscar en todos los que se cumplan la condición (t1.referencia=t2.referencia) y luego seleccionar uno.
|
Cita:
Gracias |
La franja horaria es GMT +2. Ahora son las 12:45:51. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi