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

[SOLUCIONADO] Seleccionar vehiculos km < 5000 y estado=llegada

Estas en el tema de Seleccionar vehiculos km < 5000 y estado=llegada en el foro de Mysql en Foros del Web. Buenas tardes: Tengo una consulta donde no puedo lograr hacer espero que me puedan orientar. Les explico: Lo que deseo hacer es seleccionar todos los ...
  #1 (permalink)  
Antiguo 18/09/2014, 12:29
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Pregunta Seleccionar vehiculos km < 5000 y estado=llegada

Buenas tardes:
Tengo una consulta donde no puedo lograr hacer espero que me puedan orientar. Les explico:
Lo que deseo hacer es seleccionar todos los vehículos cuyo Km sea menor a 5000 y que no se encuentren con estado salida. Las tablas son las siguientes:

Tabla: Marca
idmarca | nommarca
1________ Audi
2________ Kía
3________ Ford

Tabla: Vehiculo
idv | numplaca | marca
1 DF5478 Audi
2 EF5412 Kía
3 QS9687 Ford

Tabla: Recorrido
idreco | idv | kminicio | kmfinal | kmrecor |estado | FechSalida | FechLlegada
1____ 1 0 300 300 Llegada 12-09-2014 12-09-2014
2____ 1 300 600 300 Llegada 13-09-2014 14-09-2014
3____ 2 0 5000 5000 Llegada 12-09-2014 18-09-2014
4____ 3 0 Null Null Salida 17-09-2014

En este caso no me debería de mostrar el vehículo con id:2 cuyo km es= 5000 y tampoco debe de mostrar el vehículo con id=3 porque el estado es ="Salida"
Solo debe de mostrar el vehículo con id=1 cuyo Km sumado es de 600 el estado = "Llegada". Cuando inserte un nuevo vehículo también lo debe de mostrar. En estado al insertar un vehículo nuevo. La consulta debe de mostrarme:

Tabla: Vehiculo
idv | numplaca | marca
1 DF5478 Audi
4 WS5478 Nissan

Estoy intentando con NOT EXIST group by y having pero no logro mostrar lo que deseo.
  #2 (permalink)  
Antiguo 18/09/2014, 12:45
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, 4 meses
Puntos: 2658
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Cita:

Estoy intentando con NOT EXIST group by y having pero no logro mostrar lo que deseo.
Es difícil saber lo que haces sin verlo.
Postea la query que estás usando en este momento. Lo que nosotros podemos imaginar puede ser completamente diferente, y sin ver lo que intentas no podemos decirte dónde fallas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/09/2014, 14:49
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

ESTA ES MI CONSULTA SQL Y NO SELECCIONA LO QUE INDICO QUE SOLO MUESTRE LOS VEHICULOS CUYO KMRECOR SEA MENOR A 5000 Y QUE SU ESTADO NO ESTE EN SALIDA. ESTO ES PORQUE SOLO QUIERO UN LISTADO DE VEHÍCULOS CON KmRECOR<5000 Y QUE NO TENGA ESTADO "SALIDA" y que si agrego un vehículo nuevo que tb me lo seleccione porque no estara registrado en la tabla RECORRIDO:

Código MySQL:
Ver original
  1. SELECT v.idv,v.numplaca,ma.nommarca FROM vehiculo v
  2. INNER JOIN marca ma ON ma.idmarca=v.idmarca
  3. WHERE EXISTS(SELECT reco.idv,SUM(reco.kmrecor) AS KmRecor,reco.
  4. estado,reco.horallegada FROM recorrido reco
  5. GROUP BY reco.idv
  6. HAVING reco.idv=v.idv AND KmRecor<5000 AND reco.estado="Llegada");
  #4 (permalink)  
Antiguo 18/09/2014, 15:20
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, 4 meses
Puntos: 2658
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Y así?:
Código MySQL:
Ver original
  1.     v.idv,
  2.     v.numplaca,
  3.     ma.nommarca,
  4.     SUM(reco.kmrecor) KmRecor,
  5.     reco.estado,
  6.     reco.horallegada
  7.     vehiculo v
  8.     INNER JOIN marca ma ON ma.idmarca = v.idmarca
  9.     INNER JOIN recorrido reco ON v.idv = reco.idv
  10.     reco.estado = 'Llegada'
  11. GROUP BY reco.idv
  12. HAVING KmRecor < 5000;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/09/2014, 16:36
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Claro esta consulta muestra al vehículo cuyo Km<5000 y su estado es = "Llegada" Pero al agregar un nuevo vehículo este no se muestra ese es mi problema. Más claro el listado debe de mostrar todos los vehículos que se encuentren en estado llegada, que su km<5000 y que si agrego un nuevo vehículo que este también se muestre. Osea un vehículo nuevo que aún no tiene recorrido. Llevo 1 día intentando hacer la consulta.

Estoy pensando en crear un campo denominado ubicación y puede contener: dentro o fuera. Esto que me actualice cada vez que se genera una inserción en la tabla recorrido. Aunque creo que no seria lo ideal verdad.??

Última edición por junior1920; 18/09/2014 a las 16:49
  #6 (permalink)  
Antiguo 18/09/2014, 17:03
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, 4 meses
Puntos: 2658
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Cita:
Estoy pensando en crear un campo denominado ubicación y puede contener: dentro o fuera. Esto que me actualice cada vez que se genera una inserción en la tabla recorrido. Aunque creo que no seria lo ideal verdad.??
No compliques las cosas. El SQL es mucho más versatil, simplemente tienes que dominarlo.

Código MySQL:
Ver original
  1.     v.idv,
  2.     v.numplaca,
  3.     ma.nommarca,
  4.     IFNULL(SUM(reco.kmrecor), 0.0) KmRecor,
  5.     IFNULL(reco.estado, 'No iniciado') Estado,
  6.     IFNULL(reco.horallegada, '') horallegada
  7.     vehiculo v
  8.     INNER JOIN marca ma ON ma.idmarca = v.idmarca
  9.     LEFT JOIN recorrido reco ON v.idv = reco.idv
  10.     reco.estado = 'Llegada'
  11.     OR reco.estado IS NULL
  12. GROUP BY reco.idv
  13. HAVING KmRecor < 5000;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/09/2014, 17:48
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Me muestra los vehículos con estatus "Salida" como haría para que solo me muestre solo vehículos con estatus "Llegada". Lo demás si funca que lista vehículos con el km<5000 y los vehículos sin recorrido. El detalle esta que también muestra al vehículo con "Salida". Como lo soluciono agregue en el
Código MySQL:
Ver original
  1. WHERE reco.estado = 'Llegada'
  2.     OR reco.estado IS NULL OR reco.estado<>'Salida'

Pero me sigue mostrando al vehículo con Estado "Salida".
  #8 (permalink)  
Antiguo 19/09/2014, 05:54
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Cita:
Iniciado por junior1920 Ver Mensaje
Me muestra los vehículos con estatus "Salida" como haría para que solo me muestre solo vehículos con estatus "Llegada". Lo demás si funca que lista vehículos con el km<5000 y los vehículos sin recorrido. El detalle esta que también muestra al vehículo con "Salida". Como lo soluciono agregue en el
Código MySQL:
Ver original
  1. WHERE reco.estado = 'Llegada'
  2.     OR reco.estado IS NULL OR reco.estado<>'Salida'

Pero me sigue mostrando al vehículo con Estado "Salida".
Estimado:
Creí haber encontrado la solución pero no fue así.

Última edición por junior1920; 19/09/2014 a las 06:01
  #9 (permalink)  
Antiguo 19/09/2014, 06:52
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

gnzsoloyo:
Estoy verificando que a la hora de agrupar por el idv esto hace que la columna estado la cual puede que tenga el vallor "llegada" o "salida" y con el group by reco.idv hace que tome el valor de llegada siempre. como podría hacer que antes de agrupar primero me seleccione todos los vehiculos cuyo estado sea "Llegada" o Null. Umm podría ser con un NOT EXISTS??
  #10 (permalink)  
Antiguo 19/09/2014, 20:26
Avatar de junior1920  
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Seleccionar vehiculos km < 5000 y estado=llegada

Sres. Ya lo solucione te doy las gracias "gnzsoloyo" por tu ayuda.
Aquí dejo la consulta:
Código MySQL:
Ver original
  1. SELECT v.idv,ma.nommarca,m.serie,v.numplaca,
  2. e.tipoestado,v.kmcompra, v.kmactual,
  3. IFNULL(SUM(reco.kmrecorrido),0.0) as Kmreco,
  4. IFNULL(reco.estado, 'Llegada') as estado,
  5. IFNULL(reco.horallegada, '') horallegada
  6. FROM vehiculo v
  7. LEFT JOIN registro_reco_vehi reco ON v.idv=reco.idv
  8. INNER JOIN motor m ON m.idmotor=v.idmotor
  9. INNER JOIN marca ma ON ma.idmarca=v.idmarca
  10. INNER JOIN estado e ON e.idestado=v.idestado
  11. WHERE NOT EXISTS(SELECT reco.idv,reco.estado,reco.kmrecorrido FROM registro_reco_vehi reco
  12. WHERE reco.idv=v.idv AND reco.estado='Salida')
  13. GROUP BY reco.idv
  14. HAVING estado='Llegada' AND Kmreco<5000;

Etiquetas: tabla
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 18:59.