• ベストアンサー

db2にて複数列の副照会を行いたい

db2にて複数列の副照会を行いたい 会員番号の中で直近の利用日の明細を取得したい 例) SELECT 会員番号,利用日,利用目的,使用器具 FROM 明細テーブル      WHERE (会員番号,利用日) = (SELECT 会員番号,MAX(利用日) FROM 明細テーブル GROUP BY 会員番号) どなたかヒントをお願いします

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

試していませんが SELECT 会員番号,利用日,利用目的,使用器具 FROM 明細テーブル      WHERE (会員番号,利用日) IN (SELECT 会員番号,MAX(利用日) FROM 明細テーブル GROUP BY 会員番号) でいけませんか?

Koba5
質問者

お礼

nora1962さん ありがとうございました 本当に助かりました ※お礼が遅くなりすみませんでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

SELECT 会員番号,利用日,利用目的,使用器具 FROM 明細テーブル T1 WHERE 利用日=(SELECT MAX(T2.利用日) FROM 明細テーブル T2 WHERE T1.会員番号=T2.会員番号) でどうでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 副照会を簡単に使いまわせますか?

    たとえば、次のSQLがあったとして、 select キー1, キー2, sum(金額) (  select A.キー1 , A.キー2 , A.金額   from (select * from ~ where ...) A  union all  select '' , A.キー2 , A.金額   from (select * from ~ where ...) A  union all  select A.キー1 , '' , A.金額   from (select * from ~ where ...) A  union all  select ''   , '' , A.金額   from (select * from ~ where ...) A ) group by キー1, キー2 一番内側の副照会は、 (select * from ~ where ...) A は、4箇所とも同じSQL文で、とても長いのですが 2箇所目以降は、1箇所目と同じSQL文ということで 記述を省けたりするような構文があったりしないでしょうか? そこを、ビューにしろといわれるとその通りなのですが ビューにしたくないです。(プログラムで動的にここの副照会部分を パラメータに応じて作っているので、ビューにするとビューがいくつも できて、きりがない) Oracle9iで、利用しています。

  • SQLで'ABC'をDBの'AB'にHIT

    sqlite3をVC++2013で扱っています。 もしかしたら、単純な方法があるのかもしれないので質問させてください。 DBに渡す文字が'ABC'でDB内のデータ'AB'にHITさせたいと思っています。 現状思いつく方法は select * from テーブル where キー like 'A%'; select * from テーブル where キー like 'AB%'; select * from テーブル where キー like 'ABC%'; と渡す文字を一文字ずつ増やして検索して row数が0以上の一番小さい数のデータを取得するという方法しか思いつかないのですが。 何か良い方法はありますでしょうか?

  • 【初歩】 SELECT文で意図した照会結果が得られない。NULLの扱いは?

    var1 var2 ------------- abc  null ------------- abc  null ------------- abc  null ------------- のようになっているテーブルに対して、 (1) select * from mytable where var1 = 'abc' (2) select * from mytable where var1 = 'abc' and var2 is null などとやれば、3件全部照会できますが、 (3) select * from mytable where var1 = 'abc' and var2 != '1' (4) select * from mytable where var1 = 'abc' and var2 != 1 とやっても1件も出てこないのですが、なぜでしょうか? 「NULLだって1ではない」わけだから、3件照会できてくれないと 困るのですが・・・

    • ベストアンサー
    • MySQL
  • ACCESSパススルークエリでオラクルDB接続

    パススルークエリを用いてオラクルDBの「売上明細」テーブルのデータを抽出する。 抽出の対象はLOCALのテーブル「対象年月」で指定した月のデータに絞る。 上記の抽出をする場合、選択クエリのSQLでは Select * From 売上明細 Where Exists (Select * From 対象年月 Where 売上明細.YM=対象年月.YM); で抽出出来るのですが、パススルーだと#942「表またはビューが存在しません。」 のエラーが出ます。  年月の条件を付けずにすべてのデータを抽出することは出来るのですが 構文教えていただけるとありがたいのですが

  • 複数テーブルからデータ取得について

    初めて投稿します。よろしくお願いします。 SQLを使うのが初めてなので勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境]  データベース:SQLServer2003 下記SQL文より、該当データの抽出は出来たのですが、 この3つのSQL文を一つのSQL文にて該当データを取得したいのですが、なかなか解決出来ないので宜しくお願いします。 SELECT isnull(会員CD,' '), isnull(郵便番号,' '), isnull(住所,' '), isnull(番地,' '), isnull(方書,' '), FROM KAIINMST AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM KAIINMST WHERE A.会員CD = 会員CD) GROUP BY 会員CD,郵便番号,住所,番地,方書 ORDER BY 会員CD SELECT isnull(会員CD,' '), isnull(送付郵便番号,' '), isnull(送付住所,' '), isnull(送付番地,' '), isnull(送付方書,' '), FROM KAIINSOF AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM KAIINSOF WHERE A.会員CD = 会員CD) AND 業務CD = "20" GROUP BY 会員CD,送付郵便番号,送付住所,送付番地,送付方書 ORDER BY 会員CD SELECT isnull(会員CD,' '), isnull(代理会員CD,' '), isnull(会員区分,' ') FROM DAIRI AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM DAIRI WHERE A.会員CD = 会員CD) AND 業務CD = "20" GROUP BY 会員CD,代理会員CD,会員区分 ORDER BY 会員CD KAIINMSTテーブルをLEFT JOIN で他のテーブルデータを結合して欲しいです。 KAIINMASTの会員CDに対して他テーブルの該当データが存在しない場合は、NULLを設定して下さい。 以上です。宜しくお願いします。

  • DB検索について

    (1)PHPにてSQLをコールしてテーブルから情報の取得を行いたいのです。  $cmnd = "select * from table_a where id=01";を実行し(fetch使用)  仮に15件セレクトされたとすると、抽出された15件は  プログラム内のどこに格納されるのですか? (2)また、そのレコードを順じ処理する場合において、終了条件はどの様に  判定したら良いでしょうか?  DB:oracle

    • 締切済み
    • PHP
  • 文字と変数の結合方法について

    下記の構文で「100」の値を変数にしたいのですが、どのように記述すればよいでしょうか? UCHAR select[] = "SELECT * FROM DB WHERE 番号 = 100;"; VBみたいに"SELECT * FROM DB WHERE 番号 = " & bangou & ";"のように簡単に出来ないでしょうか?

  • DB2のSQL

    select * from xTABLE where EMP_ID = "P001" というSQLを実行すると SQL0206N "P001" is not valid in the context where it is used. SQLSTATE=42703 のエラーが出ます。 SQLSTATEで調べても「"P001"の列がテーブルにない」ということみたいですが 列名で捉えている時点でおかしい気がします select * from xTABLE where EMP_ID = null のSQLは正常にテーブルのSELECT結果が返ってきます。 どうすればよいでしょうか?

  • ACCESSを活用して商品変動を捉えたい(3再再)

    こちらの件ですが、 http://okwave.jp/qa/q8781488.html 最終的に以下で行こうと思っています。 テーブル名:スイッチング SQL構文 SELECT;   DBLookup("SELECT 受注日 FROM スイッチング WHERE 会員番号=" & [会員番号] & " AND 受注日 < #" & [受注日] & "# ORDER BY 受注日 DESC") AS 前回受注日,   DateDiff("d",前回受注日,受注日) AS 切り替え,   * FROM スイッチング WHERE (((DBLookup("SELECT COUNT(受注日) FROM スイッチング WHERE 会員番号=" & [会員番号]))>1)) ORDER BY スイッチング.会員番号, スイッチング.受注日; しかしながら、クエリ実行を押すと、以下メッセージが流れ動作しません。 何が不足しているのでしょうか。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ !SELECT ステートメントが間違っている予約語や引数を含んでいるか、 区切り記号が正しくありません。

  • データの更新について

    csvなどのテキストファイルからデータを取り込んで会員テーブルに更新するSQLを作成したくて考えています。 csvファイル 項目1:会員コード 項目2:名称 項目3:電話番号 いいやり方ではないと思いますがうまくいった方法を以下に書きます。 (1)ワークテーブル作成(csvと同じ項目) テーブル名:ワーク会員 項目1:会員コード 項目2:名称 項目3:電話番号 (2)UPDATE文実行 update 会員 K1 set 名称 = (select K2.名称 from ワーク会員 K2 where K2.会員コード = K1.会員コード), 電話番号 = (select K3.電話番号 from ワーク会員 K3 where K3.会員コード = K1.会員コード) where K1.会員コード IN (select 会員コード from ワーク会員 ) ブサイクな方法でしょうか? 他にもっといい方法があればアドバイスお願いします。