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

obtener la sumatoria de pedidos unicos

Estas en el tema de obtener la sumatoria de pedidos unicos en el foro de Mysql en Foros del Web. que tal, tengo este problema, me dieron varios archivos de excel y los estuve ir subiendo a mysql cada uno de estos archivos lo que ...
  #1 (permalink)  
Antiguo 19/08/2012, 16:41
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 11 meses
Puntos: 1
obtener la sumatoria de pedidos unicos

que tal, tengo este problema, me dieron varios archivos de excel y los estuve ir subiendo a mysql cada uno de estos archivos lo que deseo es obtener dos reportes uno es el resumen de pedido de todos los pedidos con la ultima fecha de reporte y el otro reporte es la sumatoria de pedidos unicos, como es un historico anexo el ejemplo del contenido de la tabla ya que son aproximadamente 2 millones de registros
Código MySQL:
Ver original
  1. use test;
  2.  
  3.  
  4. create table tblhistorico (fecha_orden     date         not null,
  5.                            fecha_reporte   date         not null,
  6.                            id_cliente      varchar(50)  not null,
  7.                            no_orden        varchar(50)  not null,
  8.                            cantidad        int          not null);
  9.  
  10.  
  11.  
  12. insert into tblhistorico (fecha_orden,fecha_reporte,id_cliente,no_orden,cantidad)
  13. values ('2012/07/03','2012/08/02','JL1','A1',5),
  14.        ('2012/07/03','2012/08/05','JL1','A1',5),
  15.        ('2012/08/03','2012/08/02','JL1','A5',15),
  16.        ('2012/08/03','2012/08/05','JL1','A5',15),
  17.        ('2012/08/03','2012/08/02','JL1','A7',15),
  18.        ('2012/08/03','2012/08/05','JL1','A7',15),
  19.        ('2012/08/03','2012/08/07','JL1','A7',15);

quiero obtener dos resultado del ejemplo el primero que me de lo siguiente:
Código MySQL:
Ver original
  1. fecha_orden|fecha_reporte|id_cliente|no_orden|cantidad
  2. 03/07/2012|05/08/2012|JL1|A1|5
  3. 03/08/2012|05/08/2012|JL1|A5|15
  4. 03/08/2012|07/08/2012|JL1|A7|15


y el segundo reporte sería la sumatoria de ese reporte:
Código MySQL:
Ver original
  1. id_cliente|cantidad
  2. JL1|35

Del primer caso del reporte estaba intentando de la siguiente manera pero
Código MySQL:
Ver original
  1. select fecha_orden,
  2.        fecha_reporte,
  3.        id_cliente,
  4.        no_orden,
  5.        cantidad
  6. from tblhistorico
  7. group by id_cliente,no_orden;

Pero no logro obtener del ultima fecha de reporte


Del segundo caso he intentado el rollup para obtener la sumatoria pero no logro hacerlo, ya que suma todo
Código MySQL:
Ver original
  1. select id_cliente,
  2.        no_orden,
  3.        sum(cantidad)
  4. from tblhistorico
  5. group by id_cliente,no_orden with rollup


Ojala me puedan ayudar muchas gracias

Última edición por gerardo_goh; 19/08/2012 a las 16:57
  #2 (permalink)  
Antiguo 20/08/2012, 08:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 9 meses
Puntos: 447
Respuesta: obtener la sumatoria de pedidos unicos

Hola gerardo_goh:

En este foro hemos tratado muchas veces el tema de encontrar el último registro para un cierto grupo de criterios, me sorprende que no hayas encontrado un ejemplo que pudieras aplicar a tu problema. Existen varias formas de hacer esta consulta, una de las más utilizadas sería con una subconsulta y con un INNER JOIN, haciendo lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tblhistorico;
  2. +-------------+---------------+------------+----------+----------+
  3. | fecha_orden | fecha_reporte | id_cliente | no_orden | cantidad |
  4. +-------------+---------------+------------+----------+----------+
  5. | 2012-07-03  | 2012-08-02    | JL1        | A1       |        5 |
  6. | 2012-07-03  | 2012-08-05    | JL1        | A1       |        5 |
  7. | 2012-08-03  | 2012-08-02    | JL1        | A5       |       15 |
  8. | 2012-08-03  | 2012-08-05    | JL1        | A5       |       15 |
  9. | 2012-08-03  | 2012-08-02    | JL1        | A7       |       15 |
  10. | 2012-08-03  | 2012-08-05    | JL1        | A7       |       15 |
  11. | 2012-08-03  | 2012-08-07    | JL1        | A7       |       15 |
  12. +-------------+---------------+------------+----------+----------+
  13. 7 rows in set (0.00 sec)
  14.  
  15. mysql> SELECT T1.*
  16.     -> FROM tblhistorico T1 INNER JOIN
  17.     -> ( SELECT id_cliente, no_orden, MAX(fecha_reporte) max_fecha_reporte
  18.     ->   FROM tblhistorico
  19.     ->   GROUP BY id_cliente, no_orden) T2
  20.     -> ON T1.id_cliente = T2.id_cliente AND
  21.     ->    T1.no_orden = T2.no_orden AND
  22.     ->    T1.fecha_reporte = T2.max_fecha_reporte;
  23. +-------------+---------------+------------+----------+----------+
  24. | fecha_orden | fecha_reporte | id_cliente | no_orden | cantidad |
  25. +-------------+---------------+------------+----------+----------+
  26. | 2012-07-03  | 2012-08-05    | JL1        | A1       |        5 |
  27. | 2012-08-03  | 2012-08-05    | JL1        | A5       |       15 |
  28. | 2012-08-03  | 2012-08-07    | JL1        | A7       |       15 |
  29. +-------------+---------------+------------+----------+----------+
  30. 3 rows in set (0.00 sec)

Para la segunda consulta, en realidad podrías basarte en la primera, agregando los criterios de agrupación que necesitas.

Código MySQL:
Ver original
  1. mysql> SELECT T1.id_cliente, SUM(T1.cantidad)
  2.     -> FROM tblhistorico T1 INNER JOIN
  3.     -> ( SELECT id_cliente, no_orden, MAX(fecha_reporte) max_fecha_reporte
  4.     ->   FROM tblhistorico
  5.     ->   GROUP BY id_cliente, no_orden) T2
  6.     -> ON T1.id_cliente = T2.id_cliente AND
  7.     ->    T1.no_orden = T2.no_orden AND
  8.     ->    T1.fecha_reporte = T2.max_fecha_reporte
  9.     -> GROUP BY T1.id_cliente;
  10. +------------+------------------+
  11. | id_cliente | SUM(T1.cantidad) |
  12. +------------+------------------+
  13. | JL1        |               35 |
  14. +------------+------------------+
  15. 1 row in set (0.00 sec)

Dale un vistazo, pero sobre todo trata de analizar a detalle cómo están funcionando las consultas, no que quedes solo con copiar y pegar la respuesta. Estoy seguro que si llegas a entenderlas te servirán mucho en el futuro.

Saludos
Leo.
  #3 (permalink)  
Antiguo 20/08/2012, 12:08
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: obtener la sumatoria de pedidos unicos

ok, muchas gracias leonardo, estuve revisando algunos ejemplos del maximo, voy tambien a revisar esta solucion que me das con el inner join, a veces uno se limita cuando la solucion esta enfrente de uno.

Muchas gracias amigo, saludos

Etiquetas: pedidos, registros, sql, sumatoria, tabla, unicos
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 00:58.