- - PR -
キー値が同一のとき、キー以外の値が最小のデータを効率よく取得するには
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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