A ver si esto te ayuda:
Código sql:
Ver originalSELECT r.id, SUM(IF( TIMESTAMP( CONCAT( r.ano, '-', t.mes, '-', t.dia ) ) > now( ), 1,0)) AS ANTERIORES,
SUM(IF( TIMESTAMP( CONCAT( r.ano, '-', t.mes, '-', t.dia ) ) <= now( ), 1,0)) AS POSTERIORES
FROM rutas r INNER JOIN tarifas t ON r.id = t.idruta
GROUP BY t.idruta HAVING ANTERIORES > 0 AND POSTERIORES < 1
Con esto, creo, te encontrará las rutas con tarifas anteriores, pero que tienen alguna tarifa anterior..., y que no tenga ninguna posterior.