2つの列(テーブルとID)を選択しようとしています。テーブルには、各IDの最大値とともに状態が表示されます。他のいくつかの例を試しましたが、何もうまくいかないようです。
元のデータ構造:
ID state value (FLOAT)
1 TX 921,294,481
1 SC 21,417,296
1 FL 1,378,132,290
1 AL 132,556,895
1 NC 288,176
1 GA 1,270,986,631
2 FL 551,374,452
2 LA 236,645,530
2 MS 2,524,536,050
2 AL 4,128,682,333
2 FL 1,503,991,028
したがって、結果のデータ構造は次のようになります。
ID STATE (Max Value)
1 FL
2 AL
IDグループで最大の値を持つフロリダとアラバマ。
これについてはどんな助けも大歓迎です。私はSO answer here をすでに見つけましたが、答えを私のために働かせることができませんでした。
SQL Server(およびウィンドウ機能を備えた他の製品)の場合:
SELECT *
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY value desc) as rn
FROM
UnnamedTable
) t
WHERE
t.rn = 1
サブクエリを使用して、この結果を取得できます。
select t1.id, t1.[state] MaxValue
from yourtable t1
inner join
(
select id, max(value) MaxVal
from yourtable
group by id
) t2
on t1.id = t2.id
and t1.value = t2.maxval
order by t1.id
value
が数値であるという仮定に基づく解決策:
SELECT
[ID],
[State],
[Value]
FROM
(
SELECT
[ID],
[State],
[Value],
Rank() OVER (PARTITION BY [ID] ORDER BY [Value] DESC) AS [Rank]
FROM [t1]
) AS [sub]
WHERE [sub].[Rank] = 1
ORDER BY
[ID] ASC,
[State] ASC
同じState
を持つ複数のID
が同じValue
を持つ場合、それらはすべて同じRank
を取得します。これは、一意の行番号を返すRow_Number
の使用とは異なりますが、順序は任意に選択されます。 (参照: SQL RANK()vs ROW_NUMBER() )