我有同样的问题。我想创建一个视图来显示最近一年的信息,该视图从一张记录了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相比)。