DBで重複行を削除する
たまに突然必要になるが、忘れそうなのでメモ。OLAP関数(Window関数、分析関数とも)一発で済むのがご利益。確認してないけど、OLAP関数が使えるDBならどれでも行けるハズ。
重複行が発生すること自体、絶対DB設計が間違ってるよね、とのヤジには、ワタシは心中では大いに賛同するものの、口にする勇気はないです…。
重複行削除のSQL
-- テーブルの用意 create table OLAPDeleteT(Val1 integer,Val2 integer); insert into OLAPDeleteT values(1,1),(1,2),(1,2),(1,2),(1,2),(2,1),(2,1); -- 以下が本体 delete from (select Row_Number() over(partition by Val1,Val2) as rn from OLAPDeleteT) where rn > 1;
上記SQLのコピペ元。なおこのリンク先は、SQL中級者以上なら、一度はじっくり読みこむ価値がある、オススメページ。
DB2の分析関数の使用例