@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

処理を高速にするSQLの組み合わせ

1
投稿者投稿内容
fight
ベテラン
会議室デビュー日: 2005/09/25
投稿数: 74
投稿日時: 2006-05-29 13:41
カラム1 カラム2
@ A 1
A A 2
B A 3
C B 1
D B 2
E B 3
F B 4
G C 1
H C 2
I C 3
J C 4

カラム1をwhere条件に検索した結果のうちカラム2の値が上位2件だけを残し、それ以外は削除する処理を考えています。
例えばAが対象の場合は処理後に残るレコードは@、A、C〜Jです。
※当該テーブルはカラム1とカラム2でキーになります。
テーブル構成は変更したり一時テーブルを使用してもかまいませんのでできるだけ高速に処理を完了させるための手法を教えてください。
困っています。よろしくお願いいたします。

[ メッセージ編集済み 編集者: mukoubuti 編集日時 2006-05-29 13:50 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-29 13:56
引用:

mukoubutiさんの書き込み (2006-05-29 13:41) より:
カラム1 カラム2
@ A 1
A A 2
B A 3
C B 1
D B 2
E B 3
F B 4
G C 1
H C 2
I C 3
J C 4

カラム1をwhere条件に検索した結果のうちカラム2の値が上位2件だけを残し、それ以外は削除する処理を考えています。
例えばAが対象の場合は処理後に残るレコードは@、A、C〜Jです。
※当該テーブルはカラム1とカラム2でキーになります。
テーブル構成は変更したり一時テーブルを使用してもかまいませんのでできるだけ高速に処理を完了させるための手法を教えてください。
困っています。よろしくお願いいたします。

[ メッセージ編集済み 編集者: mukoubuti 編集日時 2006-05-29 13:50 ]



一番重要なDBMSが何かが書かれていませんが、
何を使用されていますか?
またそのバージョンは何でしょうか?

_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
fight
ベテラン
会議室デビュー日: 2005/09/25
投稿数: 74
投稿日時: 2006-05-29 14:36
失礼しましたDBMSはSQL SERVER 2000です。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-29 14:56
mukoubutiさんが考えているアイデアとか
現行こうしているけど遅いとかあるのでしょうか?

自分がさっくり考えるとしたらこんな感じになりそうです。
コード:

SELECT
col1 , col2
FROM
TEST base
WHERE
col1 = 'A' AND
col2 NOT IN
(
SELECT top 2 col2
FROM TEST ref
WHERE base.col1 = ref.col1
ORDER BY col2
)


コード:

col1 col2
---- ----
A 3



削除が物理削除のDELETEであれば、DELETE文に置き換えてください。

_________________
夏椰 @ わんくま同盟
夏椰の庵

[ メッセージ編集済み 編集者: 夏椰 編集日時 2006-05-29 14:56 ]
fight
ベテラン
会議室デビュー日: 2005/09/25
投稿数: 74
投稿日時: 2006-06-07 10:37
回答ありがとうございました。当質問はクローズします。
1

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