• 締切済み

SQLで最大値を検索条件にする場合の方法

下記のような<検索対象データ>から、<取得したいデータ>を取得するSQLがわからず困っています。 ご教授下さい。 【条件】 同一[ID]で[NO]が最大のレコードのみを取得する。 <検索対象データ> ID NO DATA ---------------- AA 1 あいうえ AA 2 あいう AA 3 あい BB 1 かきく BB 2 かき CC 1 さしす CC 2 さし <取得したいデータ> ID NO DATA ---------------- AA 3 あい BB 2 かき CC 1 さし よろしくお願いします。

  • MySQL
  • 回答数3
  • ありがとう数0

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

select * from tbl t1 where t1.no = (select max(t2.no) from tbl t2 where t1.id = t2.id) MySQLもバージョンによって使えるsqlが異なりますのでバージョンは明記しましょう。 where (id,no) in・・・が使えるならANo.1の方のsqlのほうがいいと思いますが、 古いバージョンはこちらしかだめだったかと。 さらに古いバージョンはこちらもだめだったりしますが。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

><取得したいデータ> ・・・ >CC1さし 「CC2さし」じゃないと命題が成り立ちませんが・・ 何をもって「最大のレコード」と定義しているのでしょうか?

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

select * from hoge where (id,no) in (select id,max(no) from hoge group by id)

関連するQ&A

  • SQLで条件の文字列を含んでいるデータを取得する方法

    SQLにて指定した文字列を含むデータを取得する方法を探しています。 例 テーブル Test 番号   条件 __________ 01    AA 02    BB 03    AA,CC 上記のように、番号と条件という2つのフィールドを持っているテーブルをTestとします。 (1)条件にAAと指定すると、番号01と03が取得。 (2)条件にBBと指定すると、番号02が取得。 (3)条件にAAAと指定すると、一致条件なし。 (1)~(3)のような条件を満たすSQLの構文はありませんでしょうか? ご教授お願いいたします。

  • Oracle SQLでのデータ抽出

    Oracle、SQLともに初心者のため困っています。 どなたか教えてください。 フィールド1、2で重複(2件以上存在)するレコードに対して、そのテーブルの全項目を取得したいのです。 例: 処理前 フィールド1,フィールド2 ,フィールド3 1 , AA, 1 1 , AA, 2 1 , BB, 3 1 , BB, 4 2 , CC, 5 2 , CC, 6 3 , DD, 7 4 , EE, 8 5 , FF, 9 処理後 フィールド1, フィールド2,フィールド3 1 , AA, 1 1 , AA, 2 1 , BB, 3 1 , BB, 4 2 , CC, 5 2 , CC, 6 どうしたらよいでしょうか? よろしくお願い致します。

  • 複雑なSQLを一発で実行

    皆様にはいつもお世話になっており、誠に感謝しております。 一発で結果が分かるSQL文があれば、ご享受願いたいのです。 下記の様なテーブルがあります。 F_No F_Kaisu F_Memo 001  1    メモ 001  2 001  2    ああ 001  4    いい 001  4     002  1    かか 002  2    きき 002  3    くく 003  1    AA 003  2 003  2    BB 003  3    CC F_Memoに値が入っているレコードが対象であり、 F_Kaisuが数字の順番になっていないF_Noを抜き出したいのです。 上記で云えば、 F_Noの001は、 F_No F_Kaisu F_Memo 001  1    メモ 001  2    ああ 001  4    いい であり、F_Kaisuが数字の順番にはなっていないので、 001をヒット! F_Noの002は、 F_No F_Kaisu F_Memo 002  1    かか 002  2    きき 002  3    くく であり、F_Kaisuが順番なので、 002はスルー! F_Noの003は、 F_No F_Kaisu F_Memo 003  1    AA 003  2    BB 003  3 CC であり、F_Kaisuが順番なので、 003はスルー! 結果、F_Noの001を取得したいのです。 SQL一発で実行する事は可能でしょうか? もし可能ならば、SQL文のご享受をどうぞ宜しくお願い申し上げます。

  • 連番の最終番号から、符番しレコード作成

    いつもお世話になっています。 PL/SQL、ORACLE9.i環境にて、以下の処理を実現するSQL文を教えて頂けないでしょうか。 ※目標は、1つのSQL文で何とかしたいと思っています。 どうかよろしくお願いいたします。 【例】 TBLAにTBLBの内容を追加します。 その時、同一IDのレコードの場合、各ID毎のSEQの最終番号を洗い出し、 最終番号+1づつ設定します。 Key:ID・SEQ TBLA ID │SEQ │DATA ──┼──┼───── 0001│001 │AA1 0001│002 │AA2 0001│003 │AA3 0002│001 │BB1 0002│005 │BB2 ※削除処理の関係上、このようにSEQは歯抜けになっている場合もあります 0003│003 │CC1 TBLB YMD │ ID │DATA ──┼──┼───── 1201│0001│AA5 1201│0001│AA6 1201│0001│AA7 1201│0003│CC1 1201│0004│DD1 1201│0004│DD2 【結果】 TBLA ID │SEQ │DATA ──┼──┼───── 0001│001 │AA1 0001│002 │AA2 0001│003 │AA3 0001│004 │AA5 0001│005 │AA6 0001│006 │AA7 0002│001 │BB1 0002│005 │BB2 0003│003 │CC1 0003│004 │CC1 0004│001 │DD1 0004│002 │DD2

  • SQL文 複数条件の場合の書き方

    初めて質問します。 下記のようなデータが存在します。 テーブルA NO DATE GYO 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 3 2010/12/02 1 <= 4 2010/12/03 1 4 2010/12/03 2 上記データにて、<=の行の値を取得し変数へ代入したとします。 変数.NO =3 変数.日付 =2010/12/02 変数.GYO =1 上記、変数を元に1件前のレコードを抽出したいのですが SQL文でのいい方法がわかりません。 取得したいレコード 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 どうかお願いいたします。

  • エクセルの条件検索

    行の先頭の値を返すには エクセル関数をどのようにつかったらよいのでしょうか? たとえば CC1を検索すると Bが表示されるようにしたいのですが A AA1 AA2 AA3 AA4 B BB1 BB2 CC1 D BB4 AA5 この表には同じ値は絶対ありません。 VLOOKUPなど LOOKUPを主に検索をしてみたのですが、わかりませんでした よろしくおねがいいたします。

  • ファイルデータ内容を SQL条件へ代入する方法を教えてください。

    ファイルデータ内容を SQL条件へ代入する方法を教えてください。 例)ファイル(1) あいう かき さしす あかさたな … これを SQLのWhere区に 条件設定したい。 SELECT XXX FROM VVV where(ZZZ LIKE 'あいう' OR ZZZZ LIKE 'かき' OR …); という風にファイルの行があるだけ すべてLIKE条件にいれられて、一度に計算できるようにしたい。 Perl(またはShell)プログラムで ファイル読込、SQLの実行をして、結果を取得する方法をおしえてください。 プログラムは詳しくないので、詳細に書き方を教えていただけると幸いです。 よろしくお願いいたします。

  • SQLの検索条件について教えてください

    PL/SQLを使い始めた初心者です。 Oracleのバージョンは9iです。 検索時の条件の設定について教えてください。 例えば、2つテーブルがあるとします。 Aテーブル.TESTNoA ------------- 11111 22222 33333 44444 55555 Bテーブル.TESTNoB ------------- 11111 33333 55555 SQL発行時、 WHERE A.TESTNoA = B.TESTNoB で3件のレコードが取得できますよね。 これと同じ結果が欲しいのですが、 検索条件にテーブル型の変数(索引付表?)は使用できるのでしょうか? 変数 TestHen(0) = 11111 TestHen(1) = 33333 TestHen(2) = 55555 こんな感じで設定しておいて、この変数を利用して 一度のSQLで結果を取得したいのです。 できればLIKEを使って検索したいのですが…。 書き方がおかしかったらすみません。 どなたかお知恵をお貸しください。

  • SQLをどのように記述すれば出来ますか?

    SQLをどのように記述すれば出来ますか? >データベース 種目 年月  金額 AA 200501 1000 AA 200502 1000 AA 200503 1000 BB 200501 1000 BB 200502 1000 CC 200503 1000 DD ・・・ >表示形式 種目 合計 年月1 年月2 年月3 AA 3000 1000 1000 1000 BB 2000 1000    1000 CC 1000       1000 DD ・・・ ※注意点 年月範囲は固定ではなく適宜指定可能とする。 また、該当するデータが無い場合は空白とする。 上記の場合は「200501~200503」を指定した。

  • group byを使う時に条件をつけたいです。

    どう頑張っても思いどうりにDBからデータがとれず困ってます... 例えばこんなテーブルがあったら(テーブル名が"test"、カラムが"name"と"id") table test name | id ---------- aa | 1 aa | 1 aa | 1 bb | 1 bb | 1 aa | 0 aa | 0 cc | 0 カラム"id"が0の時は、カラム"name"のgroup byせず カラム"id"が1の時だけ、カラム"name"のgroup byするには、どうすればいいのでしょう? このような感じにデータを取り出したいのです。 name | id  | COUNT ---------- aa | 1 | 3 bb | 1 | 2 aa | 0 | 1 aa | 0 | 1 cc | 0 | 1 よろしくお願いします。

    • ベストアンサー
    • MySQL