各グループの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