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

[SOLUCIONADO] Duda en consulta

Estas en el tema de Duda en consulta en el foro de Mysql en Foros del Web. Buenos días maestros. La problemática que se me presenta es la siguiente, tengo las siguientes tablas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original ordenServicio + ----------------------+-------------+------+-----+---------+----------------+ ...
  #1 (permalink)  
Antiguo 07/01/2014, 11:48
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 12 años, 3 meses
Puntos: 511
Exclamación Duda en consulta

Buenos días maestros.

La problemática que se me presenta es la siguiente, tengo las siguientes tablas

Código SQL:
Ver original
  1. ordenServicio
  2. +----------------------+-------------+------+-----+---------+----------------+
  3. | FIELD                | TYPE        | NULL | KEY | DEFAULT | Extra          |
  4. +----------------------+-------------+------+-----+---------+----------------+
  5. | id                   | INT(11)     | NO   | PRI | NULL    | AUTO_INCREMENT |
  6. | idVehiculo           | DOUBLE      | YES  |     | NULL    |                |
  7. | estado               | VARCHAR(50) | YES  |     | NULL    |                |
  8. | facturacion          | datetime    | NO   |     | NULL    |                |
  9. +----------------------+-------------+------+-----+---------+----------------+
  10.  
  11. contenidoOrden
  12. +--------------------+--------------+------+-----+---------+----------------+
  13. | FIELD              | TYPE         | NULL | KEY | DEFAULT | Extra          |
  14. +--------------------+--------------+------+-----+---------+----------------+
  15. | id                 | INT(11)      | NO   | PRI | NULL    | AUTO_INCREMENT |
  16. | idOrden            | DOUBLE       | YES  |     | NULL    |                |
  17. | costoFinal         | DOUBLE       | YES  |     | NULL    |                |
  18. | estado             | VARCHAR(90)  | YES  |     | NULL    |                |
  19. +--------------------+--------------+------+-----+---------+----------------+
  20.  
  21. vehiculo
  22. +----------------------+--------------+------+-----+---------+----------------+
  23. | FIELD                | TYPE         | NULL | KEY | DEFAULT | Extra          |
  24. +----------------------+--------------+------+-----+---------+----------------+
  25. | id                   | DOUBLE       | NO   | PRI | NULL    | AUTO_INCREMENT |
  26. | placa                | CHAR(20)     | YES  |     | NULL    |                |
  27. | economico            | CHAR(20)     | YES  |     | NULL    |                |
  28. +----------------------+--------------+------+-----+---------+----------------+

el resultado que deseo obtener esta planteado de la siguiente manera: mediante un formulario obtendré un rango de fechas, con las cuales deseo obtener la suma total de los gastos por vehículo ordenados de forma desc. Los datos dependen en base al id de la tabla ordenServicio, ya que a partir de ella se debe sumar la columna de contenidoOrden.costoFinal

un ejemplo de los datos es el siguiente

Código SQL:
Ver original
  1. ordenServicio
  2. +----------------------+-------------+------------+----------------------+
  3. | id                   | idVehiculo  | estado     | facturacion          |
  4. +----------------------+-------------+------------+----------------------+
  5. | 1                    | 1           | Terminada  | 2013-10-02 16:45:00  |
  6. | 2                    | 1           | Terminada  | 2013-10-18 19:05:00  |
  7. | 3                    | 2           | Terminada  | 2013-12-02 14:19:00  |
  8. | 4                    | 3           | Terminada  | 2013-12-22 23:02:00  |
  9. +----------------------+-------------+------------+----------------------+
  10.  
  11. contenidoOrden
  12.  
  13. +----------------------+-------------+------------+------------+
  14. | id                   | idOrden     | costoFinal | estado     |
  15. +----------------------+-------------+------------+------------+
  16. | 1                    | 1           | 1500       | Terminada  |
  17. | 2                    | 1           | 450        | Terminada  |
  18. | 3                    | 2           | 758        | Terminada  |
  19. | 4                    | 3           | 459        | Terminada  |
  20. | 4                    | 3           | 187        | Terminada  |
  21. | 4                    | 3           | 962        | Terminada  |
  22. | 4                    | 4           | 569        | Terminada  |
  23. | 4                    | 4           | 45         | Terminada  |
  24. +----------------------+-------------+------------+------------+
  25.  
  26. vehiculo
  27. +----------------------+-------------+------------+
  28. | id                   | placa       | economico  |
  29. +----------------------+-------------+------------+
  30. | 1                    | 9999        | 1          |
  31. | 2                    | 8888        | 2          |
  32. | 3                    | 7777        | 3          |
  33. | 4                    | 6666        | 4          |
  34. | 5                    | 5555        | 5          |
  35. | 6                    | 4444        | 6          |
  36. | 7                    | 3333        | 7          |
  37. | 8                    | 2222        | 8          |
  38. +----------------------+-------------+------------+

el query que eh desarrollado es el siguiente:

Código SQL:
Ver original
  1. SELECT tabla1.*, tabla2.*, tabla3.* FROM
  2.     (
  3.         SELECT group_concat(ordenServicio.id) AS sonOrdenes, ordenServicio.idVehiculo FROM ordenServicio WHERE
  4.         DATE(facturacion)>='2013-09-01' AND DATE(facturacion)<='2014-01-01' AND estado='Terminada' GROUP BY idVehiculo
  5.     ) AS tabla1
  6. LEFT OUTER JOIN
  7.     (
  8.         SELECT idOrden, SUM(costoFinal) AS total FROM contenidoOrden WHERE estado='Terminada' GROUP BY idOrden
  9.     ) AS tabla2 ON tabla2.idOrden IN(tabla1.sonOrdenes)
  10.  
  11. LEFT OUTER JOIN
  12.     (
  13.         SELECT id, placa, economico FROM vehiculo
  14.     ) AS tabla3 ON tabla3.id=tabla1.idVehiculo ORDER BY tabla2.total DESC

pero no pude lograr el resultado deseado, alguien podría ayudarme, muchas gracias por su ayuda.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #2 (permalink)  
Antiguo 07/01/2014, 15:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 14 años, 9 meses
Puntos: 300
Respuesta: Duda en consulta

skiper0125,
no sé si te habré entendido bien.
Prueba esta consulta:
Código MySQL:
Ver original
  1. SELECT v.id, v.placa, SUM(co.costoFinal) total
  2. FROM vehiculo v
  3.    INNER JOIN ordenServicio os
  4.      ON v.id =os.idVehiculo
  5.    INNER JOIN contenidoOrden co
  6.      ON os.id=co.idOrden
  7.  WHERE os.facturacion BETWEEN '2014-01-01' AND '2014-01-08'
  8.  GROUP BY v.id
  #3 (permalink)  
Antiguo 07/01/2014, 15:53
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 12 años, 3 meses
Puntos: 511
Respuesta: Duda en consulta

Cita:
Iniciado por jurena Ver Mensaje
skiper0125,
no sé si te habré entendido bien.
Prueba esta consulta:
Código MySQL:
Ver original
  1. SELECT v.id, v.placa, SUM(co.costoFinal) total
  2. FROM vehiculo v
  3.    INNER JOIN ordenServicio os
  4.      ON v.id =os.idVehiculo
  5.    INNER JOIN contenidoOrden co
  6.      ON os.id=co.idOrden
  7.  WHERE os.facturacion BETWEEN '2014-01-01' AND '2014-01-08'
  8.  GROUP BY v.id
Hola que tal.

Comprobando los resultados que me muestras con tu consulta y verificándolos con los datos directamente, todo esta bien y obtengo el resultado deseado, ya solo faltan algunas validaciones en el query, pero esas las realizo yo.

Muchas gracias por tú ayuda.
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125

Etiquetas: join, left, outer
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 17:55.