J'ai eu le même problème. Je voulais créer une vue pour afficher les informations de l'année la plus récente, à partir d'un tableau avec des enregistrements de 2009 à 2011. Voici la requête d'origine :
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
Aperçu de la solution :
- créer une vue pour chaque sous-requête
- remplacer les sous-requêtes par ces vues
Voici la requête de solution :
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;
Cela fonctionne bien sur mysql 5.0.45, sans trop de pénalité de vitesse (par rapport à l'exécution de la sous-requête d'origine select sans aucune vue).