質問: sqlについて aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、sqlのselectを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 また、hhhが小さいもの 以上、よろしくお願いします。
回答: #3 に私が書いた条件は合っていたのでしょうか? 合っていたとして・・・。 > 上記のsqlで可能でしょうか? 可能ではないですね。 ただし別の方法を使ったsqlでは可能です。かなり冗長ですが。 select * from tbl a where exists (select * from tbl b where (a.aaa = b.aaa or a.ccc = b.ccc or a.ddd = b.ddd or a.eee = b.eee or a.ggg = b.ggg) and a.bbb <> b.bbb) and not exists (select * from tbl b where a.aaa = b.aaa and a.bbb = b.bbb and a.ccc = b.ccc and a.ddd = b.ddd and a.eee = b.eee and a.ggg = b.ggg and a.hhh > b.hhh) order by aaa, bbb, ccc, ddd, eee, ggg not exist句は aaa,bbb,ccc,ddd,eee,ggg が同じで hhh が小さい行が存在しない、つまり hhh が最小の行という条件を表しています。 また、window関数を使っても同じ事が出来そうです。 蛇足ですが、なかなか回答が付かないからといってマルチポストするのはやめましょう。