Ik had hetzelfde probleem. Ik wilde een weergave maken om informatie van het meest recente jaar weer te geven, uit een tabel met records van 2009 tot 2011. Dit is de oorspronkelijke vraag:
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
Overzicht van oplossing:
- maak een weergave voor elke subquery
- vervang subquery's door die weergaven
Hier is de vraag naar de oplossing:
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;
Het werkt prima op mysql 5.0.45, zonder veel snelheidsboetes (vergeleken met het uitvoeren van de originele subquery-selectie zonder weergaven).