Tôi đã từng gặp vấn đề tương tự. Tôi muốn tạo một dạng xem để hiển thị thông tin của năm gần đây nhất, từ một bảng có các bản ghi từ năm 2009 đến năm 2011. Đây là truy vấn ban đầu:
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
Đề cương giải pháp:
- tạo chế độ xem cho từng truy vấn con
- thay thế các truy vấn phụ bằng các chế độ xem đó
Đây là truy vấn giải pháp:
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;
Nó hoạt động tốt trên mysql 5.0.45 mà không bị phạt nhiều về tốc độ (so với việc thực hiện lựa chọn truy vấn phụ ban đầu mà không có bất kỳ chế độ xem nào).