MAX関数と複数問い合わせ? Oracle8 Release 8.0.5.0.0 - Productionを使用しています。

このQ&Aのポイント
  • 社員ごとの最新の日付のデータを取得する方法や、DB2でも利用可能なSQL文についての質問です。
  • テーブル内容から社員ごとの一番新しい日付のデータを取得する方法について教えてください。また、DB2でも利用可能なSQL文について教えてください。
  • Oracle8 Release 8.0.5.0.0 - Productionを使用している状況で、社員ごとの最新の日付のデータを取得する方法や、DB2でも利用可能なSQL文について教えてください。
回答を見る
  • ベストアンサー

MAX関数と複数問い合わせ?

Oracle8 Release 8.0.5.0.0 - Production を使用しています。 以下のテーブル内容から、社員ごとの一番新しい日付のデータを取得したいのですがお知恵をお貸しください。 t_table ------------------------------- 社員番号     作成日付 1         2003/04/07 13:03:57 1         2003/04/05 13:03:57 2         2003/04/10 13:03:57 3         2003/03/01 13:03:57 欲しい結果 1         2003/04/07 13:03:57 2         2003/04/10 13:03:57 3         2003/03/01 13:03:57 です。 select a.社員番号, a.作成日時 from t_table a, t_table b where a.社員番号 = b.社員番号 and b.作成日時 = (select max(作成日時) from t_table) とやると、 1         2003/04/07 13:03:57 1         2003/04/05 13:03:57 だけ持ってきてしまいます。 あと、できればDB2でも使えるようなSQL文にしたいのですが・・・ これはできればでかまいません。 宜しくお願いいたします。

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

  • ベストアンサー
  • yoshisuke
  • ベストアンサー率65% (19/29)
回答No.2

DB2は使ったことがないのですが、 オラクルだけなら select 社員番号,  max(to_char(作成日時 ,'yyyy/mm/dd hh24:mi:ss')) from t_table group by 社員番号 で抽出できると思います。

chachako
質問者

お礼

こんにちわ。ありがとうございます。 そっか、group byでもいけますね! ちなみに、自己解決してしまったのですが、単純に select 社員番号, 作成日時 from t_table a where 作成日時 IN (select MAX(作成日時) from t_table where 社員番号 = a.社員番号) という副問い合わせでもいけました! これだと共通で使えるようです。 どうもありがとうございました。

その他の回答 (1)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

未確認ですが、 select 社員番号, max(作成日時) from t_table でいいのでは ないのでしょうか?

chachako
質問者

お礼

こんにちは。 グループ関数を使用している時は、副問い合わせをしてあげないとだめなはずなんですよ。 ちなみにそのSQL文はエラーになります。 他に何かありましたらまたお願いしますネ!

関連するQ&A

  • 複数テーブルにまたがるmax

    こんにちは。 PostgreSQL8.1.10を使っています。 複数のテーブルに日付情報が入っています。 この日付のなかで最新のものを検索したいのですが、どうすればよいのでしょうか? テーブルが1つの場合なら、 select max(date) from table1; でできるのですが。 テーブルは3つ以上(10くらい)になる予定です。なにはよい方法はないでしょうか。よろしくお願いします。

  • OWNER名を指定せずにテーブルを検索方法

    こんにちは、Oracle初心者です。 ユーザーAで作成したテーブルを、ユーザーBで照会する方法を 教えてください。 新規に作成したユーザーBにDBA権限を与え、Oracleログイン後、 SELECT * FROM A.TABLE_NAME とすると問題ないのですが、 SELECT * FROM TABLE_NAME と、OWNER名を省略するとエラーが発生します。 (テーブルが存在しないというエラー) OWNER名を指定せずにテーブルを検索するにはどうすれば良いでしょうか?幼稚な質問で申し訳ございませんが、宜しくお願いします。 現在Oracle9iを使用しております。

  • 複数行の結果を単一列に連結(複数のテーブルを参照)

    psql (PostgreSQL) 7.3.4です。 困っています 以下のような【TABLE1】と【TABLE2】を TABLE1のt1tot2にで結合した結果を 【A.結果】のように★▲●の行を1行に表示させて取得したいのですがうまくいきません。 【TABLE1】 ID,ID_SUB, TYPE, VALUE A A1 t1 1 ★ A A1 t2 2 ★ A A1 t1 1 ▲ A A1 t2 3 ▲ B B1 t1 1 ● B B1 t2 3 ● 【TABLE2】 ID, TYPEV1 ,TYPEV2 ,Code A 1 1 AAA1 A 1 2 AAA2 ★ A 1 3 AAA3 ▲ B 1 3 BBB1 ●  TYPEV1=TABLE1のt1の値 TYPEV2=TABLE1のt2の値 【得たい結果】 ID, ID_SUB, TYPEV1, TYPEV2,Code A A1 1 2 AAA2★ A A1 1 3 AAA2▲ B B1 1 3 BBB1● 下記でTABLE1の2行を1行にまとめることができましたが、 問題のTABLE2との連結方法が分かりません。 select TABLE1.ID , TABLE1.ID_SUB , TABLE1.VALUE as t1 , (SELECT tbl1.VALUE FROM TABLE1 tbl1 where tbl1.TYPE=t2 and (TABLE1.ID , TABLE1.ID_SUB)=(tbl1.ID , tbl1.ID_SUB)) as t2 from TABLE1 where TABLE1.TYPE = t1 【結果】 ID ,ID_SUB , t1  ,t2 A A1 1 2 ★ A A1 1 3 ▲ B B1 1 3 ● 何か良い方法はありますでしょうか?

  • テーブルのマージSQLに関して

    初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容、所属、時間、結果 Bテーブル  社員番号、日付、内容、理由  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。

  • oracle sqlで先頭の1件を取得

    こんにちはみなさん。 現在、Oracle10gR2を使用しています。 そこで、以下のようなテーブルが存在します。 table_A(明細テーブル) denday | cd | suu | kingaku 2011/03/05 | 1| 1| 1000 2011/03/10 | 1| 2| 2000 table_B(マスタ) cd| henkoday | nm 1 | 2011/03/01| testA 1 | 2011/03/02| testB 1 | 2011/03/06| testC 上記マスタはcd、henkodayで管理しています。 上記table_Aとtable_Bを結合したいと思います。 そこで select t1.* ,t2.* from (select * from table_A order by denday) t1, (select * from table_B order by cd,henkoday desc) t2 where t1.cd=t2.cd and t1.denday>=t2.henkoday とした場合、マスタの3件分、明細データの重複ができてしまいます。 それを、直近の該当マスタのみ参照したいのですが、 以下のようなデータ抽出 table_A(明細テーブル)     table_B(マスタ) denday | cd | suu | kingaku | cd | henkoday | nm 2011/03/05 | 1 | 1 | 1000 | 1 | 2011/03/02 | testB 2011/03/10 | 1 | 2 | 2000 | 1 | 2011/03/03 | testC そのSQLがわかりません。 どうかよろしくお願いします。

  • 単一行副問合せにより2つ以上の行が返されます。エラーになります。

    単一行副問合せにより2つ以上の行が返されます。エラーになります。 お世話になります。 下記SQLを実行するとエラー”単一行副問合せにより2つ以上の行が返されます。” になってしまいます。 ご教授お願いします。 table1のcol01にtable2のcol01を table1のcol02にtable2のcol02を table2のcol03が3、table2のcol05が5で且つ table1のcol06とtable2のcol06が一致する場合に 変更したく下記SQLを作成しました。 update table1 set (col01,col02) = (select col01,col02 from table2 t2,table1 t1 where t2.col03 = 3 and t2.col05 = 5 and t2.col06 = t1.col06) where t1.col06 in (select col06 from table2); 以上 よろしくお願いします。

  • 繰り返し処理の関数を作成したい。

    環境 PostgreSQL 9.2 下記のようなテーブル[TABLE_A]の行(text) を順繰り上から引用してセレクト文の変数として使用するような関数を作成したいです。 やりたいこととしては一つ一つセレクト文を書いて出力を確認するのが無理な量な場合に作業を軽減したいです。 [TABLE_A] hogehoge_a hogehoge_b hogehoge_c ... hogehoge_xx SELECT "hogehoge_a" FROM TABLE_A; ハマってしまいなかなかうまく行きません。お願いします。

  • ACCESSのモジュールでのUNION

    ACCESS超初心者です。 モジュールでテーブルAとBテーブルBを結合しテーブルCを作成したいのですが、 DoCmd.RunSQL " SELECT * FROM TABLE_A UNION SELECT * FROM TABLE_B INTO TABLE_C; " でRunSQL実行時のエラー(2342)となってしまいます。 きっと基本的なことだと思うのですが・・・ どうぞお教えください。

  • 仮想?テーブルの作成方法

    こんにちわ。 質問タイトルが間違っているかもしれませんが、やりたい事は以下のようなことです。 列「商品番号」に、任意の値をセットしたテーブルを作りたい。 といっても、「CREATE TABLE文」でなく、 SELECT文(副問合せ)で作りたいのですが、 例えば、1行だけならば、 (SELECT '000001' AS 商品番号 FROM DUAL) TABLE_A のようにできると思うのですが、 これを複数行作成する方法がありますでしょうか? ご教授お願い致します。 ちなみに、Oracle10gです。

  • 複数のテーブルをMAX関数を使ってから結合したい

    いつもお世話になります。 ツールを作ることになり四苦八苦しているのですが、 各支店での商品毎の最新情報を表示する一覧表を作成したいと考えております。 商品マスタから外部結合にて作成しているのですが、表示項目に日付のみを表示 するのは日付の最大値ので表示できるのですが、項目が増えると表示できずに 困っております。 2つのテーブルの結合では下記のやり方でできたのですが、3つ以上の結合では どのようにすれば良いのでしょうか? http://okwave.jp/qa/q3297506.html 環境はC#及び データベースはAccess MDBです。 よろしくお願いいたします。 商品マスター 商品品番 商品名 A 商品A B 商品B C 商品C 支店Aテーブル 日付 商品品番 売上 2016/5/1 A 100 2016/5/2 B 120 2016/5/3 C 140 支店Bテーブル 日付 商品品番 売上 2016/6/1 A 100 2016/6/2 A 120 2016/6/3 C 120 支店Cテーブル 日付 商品品番 売上 2016/7/1 B 100 2016/7/2 B 120 2016/7/3 C 100 実現したい表示 商品品番 商品名 支店A販売日 支店A売上 支店B販売日 支店B売上 支店C販売日 支店C売上 A 商品A 2016/5/1 100 2016/6/2 120 null null B 商品B 2016/5/2 120 null null 2016/7/2 120 C 商品C 2016/5/3 140 2016/6/3 120 2016/7/3 100