• ベストアンサー

SQL文で教えてください

初めてです。お願いします。 次のようなテーブルがあります。 ID kosuu ------------ 1 3 2 5 3 1 kosuuの一番大きい値とそれに紐づくIDを取得したいのですが SELECT ID, Max(kosuu) FROM tblX と書くと、IDが不正だとおこられてしまいます。 ID kosuu ------------ 2 5 を抽出するにはどうしたらよいでしょうか? Access2000です。宜しくお願いします。

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

  • ベストアンサー
  • maro200
  • ベストアンサー率45% (15/33)
回答No.2

こんにちは。 先ほどのサブクエリーでは、結果が一件の時のみ有効ですので グループ化して複数のレコードを条件としたい場合は、IN句を使います。 "="を"in"に変えて、グループ化をしてみてください。 こんな感じです。 select ID,kosuu from tblX where kosuu in (select max(kosuu) from tblX group by name)

chachako
質問者

お礼

できました!! ご親切にどうもありがとうございました! 大変勉強になりました。 これからもどうぞ宜しくお願いします。

その他の回答 (1)

  • maro200
  • ベストアンサー率45% (15/33)
回答No.1

select ID,kosuu from tblX where kosuu = (select max(kosuu) from tblX) こんな感じで出来ると思います。

chachako
質問者

補足

maroさん、ありがとうございます!!できました! で、実はテーブルにはもうひとつカラムがありまして、 ID kosuu Name ------------ 1 3 aa 2 5 aa 3 1 bb となっています。 実際は、このNameでグループ化した中でのkosuuの最大値をとりたかったのです。 最大値の取り方だけわかれば後は自分で出来るかなあ? と思い、色々やってみたのですが、できませんでした(-_-) もしよろしければ、そちらのやり方も教えていただけないでしょうか? あつかましくてすみません。 宜しくお願いします。 欲しいデータは ID kosuu Name ------------ 2 5 aa 3 1 bb です。

関連するQ&A

  • SQL文の書き方

    次のような列の2つテーブルがあります ID,メッセージ,書いた日 ID,名前 一つ目のテーブルに メッセージを追加していき IDの違う最新のメッセージだけ取り出したいのですが 考えても分からなくて… SELECT ID,MAX(書いた日) FROM 一つ目のテーブル GROUP BY ID の時のIDそれぞれのメッセージが取り出せればいいのですが 最終的には IDの部分は別テーブルにある IDと一致する名前に置き換えて取り出したいと思っています よろしくお願いします データベースはPostgreSQLを使っています

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • SQLのmaxで求めた値を変数に代入する

    ex) select max(id) from table でかえってくる値を変数に代入するにはどのようにコーディングすればよいのでしょうか? ExcelVBAを使っています。

  • SQLのSELECT文で*を使わない理由

    SQLでSELECT文を使う場合、大抵  SELECT ID, user FROM u_table のように、取得する項目を指定すると思います。 これを、  SELECT * FROM u_table としないのには、トラフィックの問題以外に何か理由があるのでしょうか?

  • SQL WHERE文のノットイコールについて

    初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。

  • SQL文について困っています

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。

  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • SQL文について

    次のSQL文のうちで、適切なものはどれか。 学生表(学生番号,学生氏名,所属学科,取得単位数) 答えはこれ↓なんですが、なぜなのかがわかりません。 SELECT 所属学科,MAX(取得単位数)  FROM 学生表        GROUP BY 所属学科

  • SQL文でのデータの取得が上手くいきません

    初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)