Ich hatte das gleiche Problem. Ich wollte eine Ansicht erstellen, um Informationen des letzten Jahres aus einer Tabelle mit Datensätzen von 2009 bis 2011 anzuzeigen. Hier ist die ursprüngliche Abfrage:
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
Lösungskonzept:
- eine Ansicht für jede Unterabfrage erstellen
- Unterabfragen durch diese Ansichten ersetzen
Hier ist die Lösungsabfrage:
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;
Es funktioniert gut auf mysql 5.0.45, ohne große Geschwindigkeitseinbußen (im Vergleich zur Ausführung der ursprünglichen Unterabfrage select ohne Views).