Имах същия проблем. Исках да създам изглед, който да показва информация за последната година, от таблица със записи от 2009 до 2011 г. Ето оригиналната заявка:
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
Схема на решението:
- създайте изглед за всяка подзаявка
- заменете подзаявките с тези изгледи
Ето заявката за решение:
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;
Работи добре на mysql 5.0.45, без значително намаляване на скоростта (в сравнение с изпълнението на оригиналната подзаявка select без никакви изгледи).