- PR -

キー値が同一のとき、キー以外の値が最小のデータを効率よく取得するには

1
投稿者投稿内容
CSharp
会議室デビュー日: 2005/11/28
投稿数: 15
投稿日時: 2008-09-29 20:12
環境:SQLServer2005

以下のようなデータで、
keyの値が同一の場合、codeの値が最小のデータだけを
T-SQLで取得するにはどうしたらよいでしょうか?
※データは数百万件と多いため、これをパフォーマンスよく取得する必要があります。

データ
key code value1 value2
1 1 A 100
1 2 A 100
2 10 B 200
3 11 C 300
3 14 D 300


期待する結果
key code value1 value2
1  1 A 100
2   10 B 200
3  11 C 300



[ メッセージ編集済み 編集者: CSharp 編集日時 2008-09-29 20:19 ]
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-09-29 20:39
よくあるネタですね。
3通り書いてみます。試してません。

SELECT * FROM
data a WHERE NOT EXISTS (SELECT * FROM data WHERE [key] = a.[key] AND code < a.code)

SELECT * FROM
data a WHERE code <= ALL (SELECT code FROM data WHERE [key] = a.[key])

SELECT * FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY [key] ORDER BY code) rownum, * FROM data) a
WHERE a.rownum = 1

最大と最小間違えたので修正。

[ メッセージ編集済み 編集者: よっしー 編集日時 2008-09-29 20:45 ]
1

スキルアップ/キャリアアップ(JOB@IT)