0

私はSQL側が初めてです。この質問が非常に簡単に聞こえる場合は、私を惜しまないでください。SQLテーブルに4つの列があります.A、B、C、Dとしましょう。任意の BC の組み合わせについて、任意の数の行を取得できます。これらの選択された行について、最大 3 行を取得する必要があります (これにより、その BC 組み合わせに対して A の 3 つの一意の値が得られます)、上位 3 つの D の最大値が必要です。その BC 組み合わせの他のエントリと比較して.

したがって、BC の組み合わせはいくつあってもよいため、上記のロジックはそれらすべてを意味するはずです。

4

1 に答える 1

1

ほとんどのデータベースはランキング機能をサポートしています。これらを使用すると、次のようにやりたいことができます。

select A, B, C, D
from (select t.*,
             row_number() over (partition by B, C order by D desc) as seqnum
      from t
     ) t
where seqnum <= 3
order by B, C, D desc

row_number() 関数は、連続番号を作成します。この番号は、非常に B、C グループの「1」から始まり、D の値の降順で並べられます。

于 2012-09-02T12:55:55.850 に答える