私も同じ問題を抱えていました。 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を実行する場合と比較して)。