Retomando este problema reformulé la consulta y ya me funciona el rango de valores dados, la misma queda de esta manera:
WITH adquiridos AS (
SELECT veh_year_adq, veh_tipo_origen, COALESCE(COUNT(*),0) AS total FROM vehiculos
GROUP BY 1,2
)
SELECT v.veh_year_adq, a1.total AS compra,a2.total AS donacion, a3.total AS prestado, a4.total AS transferencia, a5.total AS alquilado FROM vehiculos v
LEFT JOIN adquiridos a1 ON v.veh_year_adq = a1.veh_year_adq AND a1.veh_tipo_origen = 0
LEFT JOIN adquiridos a2 ON v.veh_year_adq = a2.veh_year_adq AND a2.veh_tipo_origen = 1
LEFT JOIN adquiridos a3 ON v.veh_year_adq = a3.veh_year_adq AND a3.veh_tipo_origen = 2
LEFT JOIN adquiridos a4 ON v.veh_year_adq = a4.veh_year_adq AND a4.veh_tipo_origen = 3
LEFT JOIN adquiridos a5 ON v.veh_year_adq = a5.veh_year_adq AND a5.veh_tipo_origen = 4
WHERE v.veh_year_adq BETWEEN :desde AND :hasta
ORDER BY v.veh_year_adq ASC
Ahora bien, obtengo los resultados al instante, pero..., me muestra datos nulos que no debe de aparecer, entonces agrego en el where lo siguiente:
WHERE v.veh_year_adq BETWEEN :desde AND :hasta AND
a1.total IS NOT NULL OR
a2.total IS NOT NULL OR
a3.total IS NOT NULL OR
a4.total IS NOT NULL OR
a5.total IS NOT NULL
Ahora me devuelve los datos sin valores nulos, pero..., TARDA 20 SEGUNDOS!!, en una tabla con menos de 2,000 registros, a ver quién me puede ayudar a reducir esa tardanza?.
Saludos.