1

マスター テーブルのレコードのサブセットを含むテーブルを作成したいと考えています。たとえば、私は持っています:

id  name   code
1   peter  73
2   carl   84
3   jack   73

ピーターとカールは保管したいが、ピーターのコードが同じなのでジャックは保管したくない。20M のレコードがあるため、高いパフォーマンスが必要です。

私はこれを試します:

SELECT id, name, DISTINCT(code) INTO new_tab
FROM old_tab 
WHERE (conditions)

しかし、動作しません。

4

3 に答える 3

3

idperが最大の行を選択すると仮定すると、次のcodeようになります。

insert into new_tab (id, name, code) 
(SELECT id, name, code 
 FROM 
 (
   SELECT id, name, code, rank() as rnk OVER (PARTITION BY code ORDER BY id DESC) 
   FROM old_tab WHERE rnk = 1
 )
)

コードごとの最小値についてはid、ランクの並べ替え順序を DESC から ASC に変更するだけです。

insert into new_tab (id, name, code) 
(SELECT id, name, code 
 FROM 
 (
   SELECT id, name, code, rank() as rnk OVER (PARTITION BY code ORDER BY id ASC) 
   FROM old_tab WHERE rnk = 1
 )
)
于 2013-07-11T13:50:14.610 に答える
1

派生テーブルを使用して、各コードの minID を見つけ、外側のそれに結合して、oldTab からその ID の残りの列を取得できます。

select id,name,code
insert into newTabFROM
from old_tab t inner join
    (SELECT min(id) as minId, code
    from old_tab group by code) x
on t.id = x.minId
WHERE (conditions)
于 2013-07-11T13:47:32.823 に答える