Eu tive o mesmo problema. Eu queria criar uma view para mostrar as informações do ano mais recente, de uma tabela com registros de 2009 a 2011. Segue a 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 da solução:
- criar uma visualização para cada subconsulta
- substituir subconsultas por essas visualizações
Aqui está a consulta da solução:
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;
Ele funciona bem no mysql 5.0.45, sem muita perda de velocidade (em comparação com a execução da seleção de subconsulta original sem nenhuma visualização).