これと同じ問題が発生しましたMySQLで各グループの最大n値を見つける
私はこのようないくつかのデータを持っています:
+ --------- + ----------- + | レーン| シリーズ| + --------- + ----------- + | 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
驚いたことに、これはMySQL5.0とMySQL5.1で非常にうまく機能しますが、私の実稼働MySQLバージョンであるMySQL5.5では機能しません。
MySQL5.5での結果は次のようになります。
+ --------- + ----------- + | レーン| シリーズ| + --------- + ----------- + | 1 | 688 | | 1 | 685 | + --------- + ----------- +
MySQL 5.5で動作させるのを手伝ってください。または、結果が異なる理由を教えてください。どうもありがとうございました。
更新:本番データベースには約300万件のレコードがあるため、できるだけ早く結果を取得する方法を知りたいと思います。