Yo tuve el mismo problema. Quería crear una vista para mostrar información del año más reciente, a partir de una tabla con registros de 2009 a 2011. Esta es la consulta original:
SELECT a.*
FROM a
JOIN (
SELECT a.alias, MAX(a.year) as max_year
FROM a
GROUP BY a.alias
) b
ON a.alias=b.alias and a.year=b.max_year
Esquema de la solución:
- crear una vista para cada subconsulta
- reemplazar subconsultas con esas vistas
Aquí está la consulta de solución:
CREATE VIEW v_max_year AS
SELECT alias, MAX(year) as max_year
FROM a
GROUP BY a.alias;
CREATE VIEW v_latest_info AS
SELECT a.*
FROM a
JOIN v_max_year b
ON a.alias=b.alias and a.year=b.max_year;
Funciona bien en mysql 5.0.45, sin una gran penalización de velocidad (en comparación con ejecutar la selección de subconsulta original sin ninguna vista).