sql >> データベース >  >> RDS >> Mysql

MySQLで各グループの最大n値を見つける

    MySQLのみの、しかし非常に高速なソリューションについては、他の回答を参照してください。

    このソリューションでは、レーンごとに任意の数の最上位行を指定でき、MySQLの「ファンキー」構文を使用しません。ほとんどのデータベースで実行できます。

    select lane, series
    from lane_series ls
    group by lane, series
    having (
        select count(*) 
        from lane_series
        where lane = ls.lane
        and series > ls.series) < 2 -- Here's where you specify the number of top rows
    order by lane, series desc;
    

    テスト出力:

    create table lane_series (lane int, series int);
    
    insert into lane_series values 
    (1, 680),
    (1, 685),
    (1, 688),
    (2, 666),
    (2, 425),
    (2, 775);
    
    select lane, series
    from lane_series ls
    group by lane, series
    having (select count(*) from lane_series where lane = ls.lane and series > ls.series) < 2
    order by lane, series desc;
    
    +------+--------+
    | lane | series |
    +------+--------+
    |    1 |    688 |
    |    1 |    685 |
    |    2 |    775 |
    |    2 |    666 |
    +------+--------+
    4 rows in set (0.00 sec)
    


    1. SQL Azureデータベースをローカル開発サーバーにコピーするにはどうすればよいですか?

    2. Entity FrameworkがネストされたSQLクエリを生成するのはなぜですか?

    3. オラクルのシーケンスとは

    4. mysqlの単一のクエリで子カテゴリの親名を取得する