Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

No mostrar registros duplicados

Estas en el tema de No mostrar registros duplicados en el foro de Bases de Datos General en Foros del Web. Buenos dias, Tengo una tabla con n columnas entre las cuales estan numero de cliente, fecha, factura, monto. Lo que quiero hacer es una consulta ...
  #1 (permalink)  
Antiguo 25/04/2011, 10:11
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
No mostrar registros duplicados

Buenos dias,

Tengo una tabla con n columnas entre las cuales estan numero de cliente, fecha, factura, monto. Lo que quiero hacer es una consulta que me muestre los valores que no estan repetidos ejemplo:

id | fecha | fac | monto
2 | 2011/02/12 | 3 | $15.00
2 | 2011/02/15 | 2 | $10.00
2 | 2011/03/14 | 3 | -$15.00
2 | 2011/03/12 | 2 | -$10.00
2 | 2011/03/23 | 4 | $5.00
2 | 2011/03/22 | 5 | -$11.00
2 | 2011/03/20 | 5 | $11.00

Quisiera hacer una consulta que me arroja solo el registro cuya factura no se repite, es decir el registro.

2 | 2011/13/23 | 4 | $5.00

De antemano gracias por cualquier ayuda
  #2 (permalink)  
Antiguo 25/04/2011, 12:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No mostrar registros duplicados


select cliente, fecha, factura, monto from tabla group by cliente, fecha, factura, monto

Asi solo te mostrara los que no son repetidos

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/04/2011, 12:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: No mostrar registros duplicados

Hola Libras, gracias por tu respuesta, pero lamentablemente no me funciono.

Si lo agrupo por factura, fecha y monto me va a mostrar todos los registros ya que esos datos son diferentes en cada fila.

gracias por intentar
  #4 (permalink)  
Antiguo 25/04/2011, 15:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No mostrar registros duplicados

En los datos que muestras son diferentes cada uno y no se nota cual es el que quieres "distinguir" a lo que veo es el unico con factura 4 cierto??

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. id INT,
  3. fecha VARCHAR(200),
  4. fac INT,
  5. monto INT
  6. )
  7.  
  8. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/02/12',3,15)
  9. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/02/15',2,10)
  10. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/03/14',3,-15)
  11. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/03/12',2,-10)
  12. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/03/23',4,5)
  13. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/03/22',5,-11)
  14. INSERT INTO #temp (id,fecha,fac,monto) VALUES (2,'2011/03/20',5,11)
  15.  
  16. SELECT * FROM #temp WHERE fac NOT IN (
  17. SELECT fac FROM(
  18. SELECT ROW_NUMBER () OVER ( PARTITION BY fac ORDER BY fac ASC) AS RN, fac FROM #temp
  19. ) AS t1 WHERE t1.rn>1)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/04/2011, 16:13
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: No mostrar registros duplicados

Asi es, lo que quisiera hacer es mostrar solo los registros cuyas facturas no se repitan.

Respecto a tu consulta, me lo podrias explicar por favor. La probe y al principio todo bien pero con facturas con el numero 145100 y 14510 si no hay repetidas solo me muestra el registro con la factura 145100.
  #6 (permalink)  
Antiguo 26/04/2011, 07:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No mostrar registros duplicados

Podrias pasarme los datos en donde dices que no estan repetidos y solo muestran uno no los 2?, lo que hace la consulta es sacar el numero de renglon "por factura" que era como lo habias pedido si esas 2 facturas que mencionas alguna tiene el numero de factura repetido entonces no aparecera...

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 26/04/2011, 07:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: No mostrar registros duplicados

Código MySQL:
Ver original
  1.     cliente,
  2.     fecha,
  3.     factura,
  4.     monto
  5. FROM tabla
  6. GROUP BY cliente, fecha, factura
  7. HAVING COUNT(*) = 1
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 26/04/2011, 08:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: No mostrar registros duplicados

Hola israbart:

Hay un detalle con la consulta que te propone el compañero gnzsoloyo, y es el hecho de que las facturas "repetidas" no tienen la misma fecha ni el mismo saldo. A primera vista creo que marcaría error porque el campo monto no está incluido en el group by sin tener asignada una función de agrupación. Por la parte de las fechas distintas, al estar agrupando también por este campo entonces no obtendrá los resultados correctos.

Me queda una duda: si sólo te interesa "contar" los registros repetidos o si lo que necesitas es obtener aquellas facturas que no estén "canceladas", es decir, veo que cada monto tiene su respectivo registro con monto negativo, de tal manera que se obtendría un saldo = 0 si se suman los saldos, puedes intentar con lo siguiente:

Código SQL:
Ver original
  1. SELECT T1.* FROM TuTabla T1 INNER JOIN
  2. (
  3. SELECT id, fac, SUM(monto) total FROM Tutabla
  4. GROUP BY id, fac
  5. HAVING SUM(monto) != 0
  6. ) T2 ON T1.id = T2.id AND T1.fac = T2.fac
  7.  
  8. o
  9.  
  10. SELECT T1.* FROM TuTabla T1 INNER JOIN
  11. (
  12. SELECT id, fac FROM Tutabla
  13. GROUP BY id, fac
  14. HAVING COUNT(*) = 1
  15. ) T2 ON T1.id = T2.id AND T1.fac = T2.fac

Con los datos que pones de ejemplo ambas consultas deberían regresar el mismo resultado.

En cuanto a la consulta del compañero Libra, la consulta también funciona con los datos de ejemplo, aunque no termino por entender la lógica que está siguiendo para obtener el resultado, espero también la explicación que te pueda dar.

Saludos
Leo.
  #9 (permalink)  
Antiguo 26/04/2011, 08:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: No mostrar registros duplicados

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola israbart:


En cuanto a la consulta del compañero Libra, la consulta también funciona con los datos de ejemplo, aunque no termino por entender la lógica que está siguiendo para obtener el resultado, espero también la explicación que te pueda dar.

Saludos
Leo.
En la consulta que estoy mandando, lo que hice fue sacar el numero de renglones de cada factura(fac) y obteniendo nada mas donde dicho numero sea mayor a 1(o sea las facturas repetidas) hacer un join a la tabla y que nada mas muestre las que no cumplen con esta condicion, o en las cuales el numero de facturas sea 1 :)

Espero haberme explicado :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 26/04/2011, 10:18
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: No mostrar registros duplicados

Muchas gracias por sus respuestas, estudiando un poco lo que se requiere puedo sacar la consulta sumando las facturas por otro campo de la tabla.

No entiendo mucho acerca de los querys con select anidados, voy a investigar mas para entender las consultas. No puedo relevar mas datos debido a politicas de privacidad de la empresa. Nuevamente muchas gracias por su ayuda, excelente foro.

Etiquetas: duplicados, registros, bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.