こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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が小さいもの

以上、よろしくお願いします。

投稿日時 - 2012-04-28 16:32:50

QNo.7446024

すぐに回答ほしいです

質問者が選んだベストアンサー

#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関数を使っても同じ事が出来そうです。


蛇足ですが、なかなか回答が付かないからといってマルチポストするのはやめましょう。

投稿日時 - 2012-04-29 00:50:47

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

補足ありがとうございます。

おそらく下記のような条件になると思われますがどうでしょうか?

1. テーブルの中に aaa,ccc,ddd,eee,ggg のどれかの値が等しくbbbの値が異なる行が存在する。
2. aaa,bbb,ccc,ddd,eee,ggg が同じ行が有る場合は hhh が最小のものを抽出する。


もし、これでよろしければ、下記の様なSQLになると思います。

----------------------------------------
SELECT aaa, bbb, ccc, ddd, eee, ggg, MIN(hhh) 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)
GROUP BY aaa, bbb, ccc, ddd, eee, ggg
ORDER BY aaa, bbb, ccc, ddd, eee, ggg
----------------------------------------

投稿日時 - 2012-04-28 23:28:32

補足

早速のご回答ありがとうございます。

(テーブル:AAA)
aaa bbb ccc ddd eee ggg hhh iii
-------------------------------
111 111 111 111 111 111 111 ii1
112 112 112 112 112 112 111 ii2
112 113 113 113 113 113 111 ii3
114 114 114 114 114 114 111 ii4
114 114 114 114 114 114 112 ii5
114 115 115 114 114 115 111 ii6
114 115 115 114 114 115 112 ii7
116 116 116 116 116 116 111 ii8
116 116 116 116 116 116 112 ii9
116 116 116 116 116 117 111 ii0
116 116 116 116 116 117 112 ii1
118 118 118 118 118 118 118 ii2

のようにテーブル:AAAにiiiを追加し、

aaa bbb ccc ddd eee ggg hhh iii
-------------------------------
112 112 112 112 112 112 111 ii2
112 113 113 113 113 113 111 ii3
114 114 114 114 114 114 111 ii4
114 115 115 114 114 115 111 ii6

を抽出する場合(条件にないiiiも抽出する)も、
上記のSQLで可能でしょうか?

よろしくお願いします。

投稿日時 - 2012-04-28 23:57:05

ANo.2

提示されている条件に不明な点が有りますので確認です。

> ・aaa,ccc,ddd,eee,gggが重複、
「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか?

> ・hhhが小さいもの
何と比べて小さいのでしょうか?
aaa,ccc,ddd,eee,ggg と比べてでしょうか?
それとも他の全てのカラムと比べるのでしょうか?
あるいは決まった数と比べてでしょうか?

> ・bbbが異なるもの
何と異なるのでしょうか?
aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか?
それとも他の全てのカラムの値と異なるのでしょうか?

投稿日時 - 2012-04-28 22:01:19

補足

回答ありがとうございます。
質問が適切ではなかったので以下のご質問にコメントいたします。

> > ・aaa,ccc,ddd,eee,gggが重複、
>「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか?

御認識の通りです。

> > ・hhhが小さいもの
> 何と比べて小さいのでしょうか?
> aaa,ccc,ddd,eee,ggg と比べてでしょうか?
> それとも他の全てのカラムと比べるのでしょうか?
> あるいは決まった数と比べてでしょうか?

「aaa,ccc,ddd,eee,ggg が全て同じ値」のものに対して一番小さい値となります。
114 114 114 114 114 114 111 ・・・A
114 114 114 114 114 114 112 ・・・B
114 115 115 114 114 115 111 ・・・C
114 115 115 114 114 115 112 ・・・D
でいいますと、AとB、CとDふぁ条件に一致してその中でhhhが小さい
AとCを抽出したいということです。

> > ・bbbが異なるもの
> 何と異なるのでしょうか?
> aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか?
> それとも他の全てのカラムの値と異なるのでしょうか?

「aaa」が一致しているものの中でbbbが異なるものを指しています。

よろしくお願いします。

投稿日時 - 2012-04-28 22:44:32

はじめまして。

select * from table1 where aaa=ccc && aaa=ddd && aaa=eee && aaa=ggg && aaa!=bbb && aaa>hhh
これで抽出できませんか?
テーブル名はtable1としました。

投稿日時 - 2012-04-28 16:57:35

お礼

ご回答ありがとうございます。
質問の内容が適切ではなかったようです。
No.2の方より質問がありましたのですそちら再度質問させていただきます。

投稿日時 - 2012-04-28 22:34:49

あなたにオススメの質問