- - PR -
WHERE句内で「値=最大値」を取得する方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-02 15:52
お世話になっております。
SOLSERVER2000で開発しております。 WHERE句内で、以下のように外部結合しています。 SELECT * FROM A,B,C WHERE A.customerCD *= B.customerCD AND B.customerCD *= C.customerCD AND B.Yoteibi = @ AND C.Yoteibi = A customerCDは主キーです。 A・B・Cテーブルには共にcustomerCDが あるのですが、B・Cテーブルは主キーとして 更にYoteibiがあります。 このSQL文で取得したいレコードは1件です。 BとCテーブルのYoteibiがcutomerCDに対して複数件存在するので、 上記のSQL文を実行すると、予定日が存在する分だけ 複数件のレコードを取得してしまいます。 この為、条件として、 「B・CテーブルのYoteibiが最新のレコードのみ」 取得したいのですが、 方法がわかりません。 前提として、タイトル通りWHERE句内でどうにかならないかと 考えています。 WHERE句以前のSQL文はマクロによる自動作成だからです。 MAX()でとれるのかな?と思っていたのですが、 WHERE句内でMAXを使用したところ、 以下のように怒られました。 ”次の場合以外は WHERE 句内で集計を使用できません。集計が HAVING 句または選択リスト内のサブクエリにある場合、および集計する列が外部参照の場合。” そこで、どうすればよいかわからず質問させていただきました。 毎度低レベルな質問で恐縮ですが、何卒宜しくお願いいたします。 | ||||||||
|
投稿日時: 2005-11-02 16:31
こんにちは、でっちです。
ご質問の件は「副問合せ」で行けるかな?
SQL*Serverが今手元にないので試せてはないです。 あと会議室はDatabase Expertが適切だと思います。 [追記] #被った ![]() #ただ、あおいさんの書かれたものと、私の書いたものでは結果が異なるので注意して下さい。 あと、
元のSQLでは、ここが通らないはずなので、修正しました。 確か「外部結合の要求を持つクエリは許可されません。」とか言うエラーになるはず。 [ メッセージ編集済み 編集者: でっち6号 編集日時 2005-11-02 16:41 ] | ||||||||
|
投稿日時: 2005-11-02 16:31
副問い合わせでできませんか?
自分の環境で以下のSQLでできたと思います。 SELECT * FROM A,B,C WHERE A.customerCD = B.customerCD AND B.customerCD = C.customerCD AND B.Yoteibi = ( select max(B.Yoteibi) from B) AND C.Yoteibi = ( select max(C.Yoteibi) from C) | ||||||||
|
投稿日時: 2005-11-02 17:19
でっち6号さん、あおいさん
お二人とも適切なアドバイスありがとうございます。 >でっち6号さん Database Expertにするべきか悩んだのですが、、 やはりあちらがよろしかったのですね、失礼致しました。 ご指摘に感謝いたします。 さて、でっち6号さん、あおいさんのおかげで、 希望の事ができたなぁと考えていたのですが、 また新たに問題が、、 B.Yoteibi、C.Yoteibiともにchar型なのですが、 同じ日が複数ある事がありえるとの事でした。 DISTINCTなどを副問合せの中に入れたら、 同じYoteibiが同じ日付で複数あった場合も 重複分を抜けるかなぁ等と思っていましたが、 やはりできませんでした。 大変申し訳ないのですが、、 上記内容を実現できる方法はあるでしょうか? 毎度すみません。。 | ||||||||
|
投稿日時: 2005-11-02 17:34
でっちです。
???同一データが複数あってもMAXかければ1件になるので、DISTINCTなど入れなくても行けるはずですが??? ちょっと問題点が分らないので、データなども合わせて説明していただけますか? |
1