Ver Mensaje Individual
  #23 (permalink)  
Antiguo 27/08/2008, 17:22
yazo
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Respuesta: ¿Como arreglar esta consulta?

¿Como podría sacar un historial de las rutas? es decir, un listado como el anterior pero con todas las fechas que ya hayan pasado.

He probado con:

SELECT * , f.id AS idflota, f.nombre AS nombreflota, f.logotipo AS logoflota, c.id AS idcoche, c.nombre AS nombrecoche, c.fotocoche AS fotocoche, c.videocoche AS videocoche, r.nombre AS nombreruta, r.id AS idruta, r.ano AS anoruta, r.opciones AS opcionesruta, tar.mes AS mestarifa, MIN( LEAST( if( tar.preciopromocion >0, tar.preciopromocion, 100000 ) , if( tar.tarifa1 >0, tar.tarifa1, 100000 ) , if( tar.tarifa2 >0, tar.tarifa2, 100000 ) , if( tar.tarifa3 >0, tar.tarifa3, 100000 ) , if( tar.tarifa4 >0, tar.tarifa4, 100000 ) , if( tar.tarifa5 >0, tar.tarifa5, 100000 ) , if( tar.tarifa6 >0, tar.tarifa6, 100000 ) , if( tar.tarifa7 >0, tar.tarifa7, 100000 ) ) ) AS tarifamenor
FROM rutas r
INNER JOIN tarifas tar ON tar.idruta = r.id
INNER JOIN flotas f ON f.id = r.idflota
INNER JOIN coches c ON c.idflota = f.id
WHERE r.id =1
AND tar.mes LIKE '10'
AND r.ano =2008
AND tar.completo !=1
AND r.oculto !=0
AND f.oculto !=0
AND TIMESTAMP( CONCAT( r.ano, '-', tar.mes, '-', tar.dia ) ) < now( )
GROUP BY tar.id ORDER BY f.nombre, r.ano, c.nombre, r.nombre


Pero este me saca los circuitos que tienen una fecha que disponible.

Tambien he intentado con MINUS:
SELECT * , f.id AS idflota, f.nombre AS nombreflota, f.logotipo AS logoflota, c.id AS idcoche, c.nombre AS nombrecoche, c.fotocoche AS fotocoche, c.videocoche AS videocoche, r.nombre AS nombreruta, r.id AS idruta, r.ano AS anoruta, r.opciones AS opcionesruta, tar.mes AS mestarifa, MIN( LEAST( if( tar.preciopromocion >0, tar.preciopromocion, 100000 ) , if( tar.tarifa1 >0, tar.tarifa1, 100000 ) , if( tar.tarifa2 >0, tar.tarifa2, 100000 ) , if( tar.tarifa3 >0, tar.tarifa3, 100000 ) , if( tar.tarifa4 >0, tar.tarifa4, 100000 ) , if( tar.tarifa5 >0, tar.tarifa5, 100000 ) , if( tar.tarifa6 >0, tar.tarifa6, 100000 ) , if( tar.tarifa7 >0, tar.tarifa7, 100000 ) ) ) AS tarifamenor
FROM rutas r
INNER JOIN tarifas tar ON tar.idruta = r.id
INNER JOIN flotas f ON f.id = r.idflota
INNER JOIN coches c ON c.idflota = f.id
WHERE r.id =1
AND tar.mes LIKE '10'
AND r.ano =2008
AND tar.completo !=1
AND r.oculto !=0
AND f.oculto !=0
GROUP BY tar.id ORDER BY f.nombre, r.ano, c.nombre, r.nombre

MINUS

SELECT * , f.id AS idflota, f.nombre AS nombreflota, f.logotipo AS logoflota, c.id AS idcoche, c.nombre AS nombrecoche, c.fotocoche AS fotocoche, c.videocoche AS videocoche, r.nombre AS nombreruta, r.id AS idruta, r.ano AS anoruta, r.opciones AS opcionesruta, tar.mes AS mestarifa, MIN( LEAST( if( tar.preciopromocion >0, tar.preciopromocion, 100000 ) , if( tar.tarifa1 >0, tar.tarifa1, 100000 ) , if( tar.tarifa2 >0, tar.tarifa2, 100000 ) , if( tar.tarifa3 >0, tar.tarifa3, 100000 ) , if( tar.tarifa4 >0, tar.tarifa4, 100000 ) , if( tar.tarifa5 >0, tar.tarifa5, 100000 ) , if( tar.tarifa6 >0, tar.tarifa6, 100000 ) , if( tar.tarifa7 >0, tar.tarifa7, 100000 ) ) ) AS tarifamenor
FROM rutas r
INNER JOIN tarifas tar ON tar.idruta = r.id
INNER JOIN flotas f ON f.id = r.idflota
INNER JOIN coches c ON c.idflota = f.id
WHERE r.id =1
AND tar.mes LIKE '10'
AND r.ano =2008
AND tar.completo !=1
AND r.oculto !=0
AND f.oculto !=0
AND TIMESTAMP( CONCAT( r.ano, '-', tar.mes, '-', tar.dia ) ) >= now( )
GROUP BY tar.id ORDER BY f.nombre, r.ano, c.nombre, r.nombre


Pero he leido que minus en mysql no funciona.

¿Que alternativas me recomendais?

Muchas Gracias