Ho avuto lo stesso problema. Volevo creare una vista per mostrare le informazioni dell'anno più recente, da una tabella con i record dal 2009 al 2011. Ecco la query originale:
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
Schema di soluzione:
- crea una vista per ogni sottoquery
- sostituisci le sottoquery con quelle viste
Ecco la domanda di soluzione:
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;
Funziona bene su MySQL 5.0.45, senza una penalità di velocità (rispetto all'esecuzione della selezione della sottoquery originale senza alcuna visualizzazione).