Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/08/2012, 08:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.