[pgsql-jp: 34578] 自分のテーブルのローを削除したい。

渡辺 伸雄 watanove @ nifty.ne.jp
2004年 12月 28日 (火) 18:03:57 JST


渡辺です。いつも、参考にさせて頂いています。

会員Noと登録時刻が入っているテーブルがあり、
1つの会員Noについて複数の登録時刻が登録可能です。

そのテーブルの各会員の最新の登録時刻以外のローを削除したいのです。

テーブルXにmemberIDとAssignTimeがあるとします。

X
memberID AssignTime
1 2004/12/28 17:00:00
1 2004/12/28 18:00:00
2 2004/12/28 17:50:00

この中で最初のローだけを削除したいのです。

deleteした結果は
X
memberID AssignTime
1 2004/12/28 18:00:00
2 2004/12/28 17:50:00
としたいのです。

で、思いついたSQLが次のSQLなのですが、
何か反則気味な感じがします。

delete from X
where not oid in (select x2.oid from
(select max(AssignTime) as ma,memberid from x)x1
join
x x2
on x1.memberid=x2.memberid and x1.ma=x2.assigntime);

oidを使うのは良くない気がしますし、
カーソルなどを使うのでしょうか?
もっと、さっぱりした方法を知りたいのですが。
よろしくお願いします。





pgsql-jp メーリングリストの案内