我遇到了同样的问题Find the highest n values of each group in MySQL
我有一些这样的数据:
+ --------- + ------------ + | 车道 | 系列 | + --------- + ------------ + | 1 | 680 | | 1 | 685 | | 1 | 688 | | 2 | 第666章 | 2 | 425 | | 2 | 775 | + --------- + ------------ +
而且我想抓住每条车道最高的 n 系列(为了这个例子,我们说 2,但它可能不止于此)所以输出应该是:
+ --------- + ------------ + | 车道 | 系列 | + --------- + ------------ + | 1 | 688 | | 1 | 685 | | 2 | 775 | | 2 | 第666章 + --------- + ------------ +
我认为具有“时髦” MySQL 特性的 SQL 相当不错。
set @count:=-1, @lane:=0;
select lane, series
from (select lane, series from lane_series order by lane, series desc) x
where if(lane != @lane, @count:=-1, 0) is not null
and if(lane != @lane, @lane:=lane, lane) is not null
and (@count:=@count+1) < 2; -- Specify the number of row at top of each group here
令我惊讶的是,它在 MySQL 5.0 和 MySQL 5.1 上运行良好,但它不适用于我的生产 MySQL 版本 MySQL 5.5。
MySQL 5.5 上的结果是这样的:
+ --------- + ------------ + | 车道 | 系列 | + --------- + ------------ + | 1 | 688 | | 1 | 685 | + --------- + ------------ +
请帮助我使其在 MySQL 5.5 上运行或告诉我为什么结果不同,非常感谢!
更新:因为我的生产数据库中有大约 300 万条记录,我想知道如何以最快的方式获得结果,尽可能快。