Měl jsem stejný problém. Chtěl jsem vytvořit pohled pro zobrazení informací za poslední rok z tabulky se záznamy od roku 2009 do roku 2011. Zde je původní dotaz:
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
Nástin řešení:
- vytvořte zobrazení pro každý dílčí dotaz
- nahradit poddotazy těmito zobrazeními
Zde je dotaz na řešení:
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;
Funguje to dobře na mysql 5.0.45, bez velké penalizace rychlosti (ve srovnání s provedením původního výběru poddotazu bez jakýchkoli zobrazení).