/ /各グループのトップ2の値を選択-sql、sql-server

グループごとにTOP 2の値を選択する - sql、sql-server

各グループのTOP 2値のみの取得に問題があります(グループは列にあります)。

例:

ID    Group    Value
1        A       30
2        A      150
3        A       40
4        A       70
5        B        0
6        B      100
7        B       90

私の出力は

ID    Group    Value
1       A       150
2       A        70
3       B       100
4       B        90

単純に、各グループには最高の値を持つ2行だけが必要です。

回答:

回答№1の場合は3

ほとんどのデータベースはANSI標準をサポートしています row_number() 関数。次のように使用します。

select group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;

を設定する id あなたは使うことができます row_number() 外部クエリで:

select row_number() over (order by group, value) as id,
group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;

ただし、 id 疑わしいようです。


回答№2については2

あなたは使うことができます CTE ランク関数付き ROW_NUMBER() .

結果を取得するためのクエリを次に示します。

;WITH cte AS
( SELECT Group, value,
ROW_NUMBER() OVER (PARTITION BY Group ORDER BY value DESC) AS rn
FROM test
)
SELECT Group, value FROM cte
WHERE rn <= 2
ORDER BY value