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

Consulta Mysql Datos Repetidos

Estas en el tema de Consulta Mysql Datos Repetidos en el foro de Mysql en Foros del Web. Como puedo enumerar los datos de una consulta en orden ascendente de registros repetidos Ejemplo Tabla detalle_factura Idfactura detalle valor 0001 Lapiz 1000 0001 Color ...
  #1 (permalink)  
Antiguo 22/08/2013, 12:38
Avatar de guillorios  
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Consulta Mysql Datos Repetidos

Como puedo enumerar los datos de una consulta en orden ascendente de registros repetidos

Ejemplo

Tabla detalle_factura

Idfactura detalle valor

0001 Lapiz 1000
0001 Color 2000
0001 Cuaderno 5000
0001 Libro 10000
0002 Color 2000
0002 Sacapuntas 1000
0002 Libro 10000
0003 Libro 10000

La consulta seria numerar del 1 hasta el siguiente numero de factura

Idfactura detalle valor contador

0001 Lápiz 1000 1
0001 Color 2000 2
0001 Cuaderno 5000 3
0001 Libro 10000 4
0002 Color 2000 1
0002 Sacapuntas 1000 2
0002 Libro 10000 3
0003 Libro 10000 1

Agradecería mucho su ayuda.
  #2 (permalink)  
Antiguo 22/08/2013, 12:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Mysql Datos Repetidos

Hola guillorios:

Hay varias formas de hacer esto, checa esta página:

http://www.artfulsoftware.com/infotr...ip.php?id=1098

si tienes problemas postea lo que intentaste hacer y con gusto te ayudamos.

Saludos
Leo.
  #3 (permalink)  
Antiguo 22/08/2013, 16:37
Avatar de guillorios  
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Consulta Mysql Datos Repetidos

Fue perfecto el ejemplo aunque hice una modificación porque la consulta la hago a partir de .net

Código MySQL:
Ver original
  1. SELECT @Idfacturaprev=0, @ordPrev=0, Idfactura, detalle, valor, row_number
  2. FROM (
  3.   SELECT  
  4.     Idfactura, detalle, valor,
  5.     @ordPrev := If(@Idfacturaprev = Idfactura, @ordPrev + 1, 1) as row_number,  
  6.     @Idfacturaprev := Idfactura AS Idfactura
  7.   FROM detalle_factura
  8.   ORDER BY Idfactura
  9. ) AS tmp;

El lio es que cuando hago la consulta por primera vez no sale pero cuando vuelvo a hacerla sale perfecta y si envio las variables con set al principio tampoco sale
  #4 (permalink)  
Antiguo 23/08/2013, 07:54
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Mysql Datos Repetidos

Hola de nuevo:

Es probable que la consulta no funcione la primera vez justamente porque no tienes declaradas las variables... y es probable que la consulta no funcione cuando pones los SET, porque en realidad estas ejecutando dos operaciones de base de datos, recuerda que el (;) indica el fin de una sentencia...

Una cosa que puedes hacer es meter esto dentro de un Procedimiento almacenado, de tal manera que puedas colocar tanto los SET's como la consulta y ejecutarlo todo como una sola instrucción... además, recuerda que te comenté que hay muchas formas de hacerlo, en la página que te puse incluso puse otro ejemplo... si no te importa que se cambie el orden de los detalles, puedes utilizar la técnica del COUNT:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-----------+------------+-------+
  3. | Idfactura | detalle    | valor |
  4. +-----------+------------+-------+
  5. | 0001      | Lapiz      |  1000 |
  6. | 0001      | Color      |  2000 |
  7. | 0001      | Cuaderno   |  5000 |
  8. | 0001      | Libro      | 10000 |
  9. | 0002      | Color      |  2000 |
  10. | 0002      | Sacapuntas |  1000 |
  11. | 0002      | Libro      | 10000 |
  12. | 0003      | Libro      | 10000 |
  13. +-----------+------------+-------+
  14. 8 rows in set (0.00 sec)
  15.  
  16. mysql> SELECT a.idfactura, a.detalle, a.valor, COUNT(*) AS row_number
  17.     -> FROM tabla a
  18.     -> JOIN tabla b
  19.     ->   ON a.idfactura = b.idfactura
  20.     ->   AND (a.detalle > b.detalle OR
  21.     ->       (a.detalle = b.detalle AND a.valor >= b.valor))
  22.     -> GROUP BY a.idfactura, a.detalle, a.valor;
  23. +-----------+------------+-------+------------+
  24. | idfactura | detalle    | valor | row_number |
  25. +-----------+------------+-------+------------+
  26. | 0001      | Color      |  2000 |          1 |
  27. | 0001      | Cuaderno   |  5000 |          2 |
  28. | 0001      | Lapiz      |  1000 |          3 |
  29. | 0001      | Libro      | 10000 |          4 |
  30. | 0002      | Color      |  2000 |          1 |
  31. | 0002      | Libro      | 10000 |          2 |
  32. | 0002      | Sacapuntas |  1000 |          3 |
  33. | 0003      | Libro      | 10000 |          1 |
  34. +-----------+------------+-------+------------+
  35. 8 rows in set (0.00 sec)

Observa que el único detalle es que para el caso del idfactura = 0001, en lugar asignar Lápiz como número 1, coloca Color... esto es porque está ordenando los detalles de manera alfabética.

Saludos
Leo.

Etiquetas: enumerar, repetidos
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 05:15.