• ベストアンサー

SQL文を教えてください。

すみません、SQLを教えてください。 ID, 名前の2つのフィールドを持つテーブルがあります。 中身は以下のように入っています。 1, AAA 2. AAA 2, BBB 3, CCC 3, AAA 4, DDD 5, EEE, 5, DDD これを、名前のダブリをスキップしながら、 IDの大きな順番に名前を取り出したいのです。 結果は、以下のようになればいいです。 DDD EEE AAA CCC BBB どのようなSQLを組んだら実現できますか? よろしくお願いいたします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

要件がおかしくない? 例示データならDよりEが先と思います。 あと、テーブル名、列名も決めておいてね。TABLE、IDとNAMEとします。 Select NAME From ( Select NAME,Max(ID) as MAX_ID From TABLE Group by NAME ) Order by MAX_ID DESC ;

opera-2010
質問者

お礼

ご回答ありがとうございます。 教えて頂いたとおり実行してみたのですが、syntax errorが発生してしまいました。 ちなみ、以下のSQLを実行してみました。 *************************************************************** Select NAME From ( Select NAME,Max(ID) as MAX_ID From TTEST Group by NAME ) Order by MAX_ID DESC; *************************************************************** そうしましたら、次のエラーが発生しました。 *************************************************************** ERROR: syntax error at or near "From" at character 50 LINE 2: Select NAME,Max(ID) as MAX_ID From TTEST Group by NAME ^ *************************************************************** 申し訳ありませんが、解決方法を再度教えていただけないでしょうか? よろしくお願いいたします。

opera-2010
質問者

補足

すみません、その後 Select name, Max(ID) as MAX_ID From TTEST Group by NAME Order by MAX_ID DESC; ↑これを実行したら、うまくいきました。 大変助かりました。 ありがとうございました!

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

IDが5同士なら名前順ということみたいなので 0rder by MAX_ID DESC,NAME に訂正

関連するQ&A

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • SQLについてお聞きします

    フィールド1 |フィールド2 |フィールド3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、フィールド1のAAAとBBBは値をそのまま抽出し フィールド1のDDDはフィールド2とフィールド3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? フィールド2とフィールド3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • データの加工方法(SQL)について

    「TABLE1」から「TABLE2」というテーブルを作成したいと考えております。 TABLE1ではNAMEという項目がキーとなってデータが入っていました。 それをIDという項目をキーとした形にデータ加工したいと考えています。 各IDにおけるNAMEの数はMAXでも5個までとなります。 何か良い方法は有りますでしょうか? SQLのSELECT文で行う事を考えていますが、方法がわかりませんでした。 (EXCELなどで他に容易な方法があれば他の方法でもかまいません) よろしくお願いいたします。 ■TABLE1 ------------- ID NAME ------------- 1000 AAA 1000 BBB 1000 CCC 1000 DDD 1001 EEE 1001 FFF ------------- ■TABLE2 ---------------------------------------------- ID NAME1 NAME2 NAME3 NAME4 NAME5 ---------------------------------------------- 1000 AAA BBB CCC DDD 1001 EEE FFF ----------------------------------------------

  • SQL文を教えてください

    いつもお世話になっております。 ウェブサイトを作っているのですが、以下のようなデータを表示するのに良いSQL文が分からず悩んでいます。 ID | DATE     | DATA --+----------+----- 1 | 2010-11-11 | aaa 2 | 2010-11-11 | bbb 1 | 2010-11-10 | ccc 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 4 | 2010-11-10 | fff 1 | 2010-11-12 | ggg 2 | 2010-11-12 | hhh 1 | 2010-11-12 | iii 3 | 2010-11-12 | jjj 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 1 | 2010-11-06 | qqq 3 | 2010-11-05 | rrr 2 | 2010-11-13 | sss 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy 11| 2010-10-30 | zzz 上のようなテーブルから、各IDを10件まで日付順に取り出すことはできるでしょうか? 具体的には、1つのページに以下のように表示したいのです。 2 | 2010-11-13 | sss 2 | 2010-11-11 | bbb 1 | 2010-11-12 | ggg 1 | 2010-11-11 | aaa 1 | 2010-11-10 | ccc 1 | 2010-11-12 | iii 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 3 | 2010-11-05 | rrr 4 | 2010-11-10 | fff 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy ・各IDのうち、最も新しい日付のものが上にくる ・表示するIDは10件まで ・表示はIDごとにまとめて行う ・一つのIDに属するデータは10件までしか取り出さない 上記のことを実現する方法をご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLについて

    レコード1 |レコード2 |レコード3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、レコード1のAAAとBBBは値をそのまま抽出し レコード1のDDDはレコード2とレコード3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? レコード2とレコード3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • SQL文で数字+指定文字列がヒットする記述方法

    mySQLを使ってます。 SQL文で以下のことが実現したいです。 フィールドに登録されている文字列が http://www.AAA.jp/BBB/CCC/08191.html/?cp=waribiki http://www.AAA.jp/shop/DDD/EEE/08191.html http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というタイプがあります。 SQL文で検索結果を表示したいのは、 http://www.AAA.jp/shop/DDD/EEE/数字.html のように右から「数字.html」の場合のURLパスだけを抽出したいです。 SELECT * FROM `テーブル名` WHERE `フィールド名` LIKE '%html' とやってみましたが、 http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というものもヒットしてしまうため 右から「数字.html」の場合だけのSQL文の書き方を教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • CSVファイルをAccessに取りこみたい

    以下のような2つのCSVファイルがあるとします。 【hoge1.csv】 aaa,bbb,ccc,ddd 1,2,3,4 【hoge2.csv】 aaa,bbb,ddd,eee,fff 1,2,4,5,6 Accessをあまり使用したことがないので教えていただきたいのですが、 hoge1.csv、hoge2.csvを、以下のような形で Accessの1つのテーブルにインポートする事はできるのでしょうか? ---------------------------- | aaa | bbb | ccc | ddd | eee | fff | | 1 | 2 | 3 | 4 |  |  | | 1 | 2 |  | 4 | 5 | 6 | ---------------------------- ※「aaa」「bbb」…をフィールド名としたいです vb等でプログラムを自作するしかないのでしょうか? 何か良い方法がありましたら教えてください。お願いします。

  • 分岐SQLを一発のSQLで実現したい

    【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD Table2 種類、キー1、キー2 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD Table3 種類、キー1、キー2 NULL  AAA  BBB NULL  AAA  CCC NULL  AAA  DDD これをUNIONで取得します。 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD NULL  AAA  BBB NULL  AAA  CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD →いる NULL  AAA  BBB →いらない NULL  AAA  CCC →いらない ↓結果 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。

  • OraclのSQL文について(No3)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 BBB A-2 2005/01/01 300 CCC A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 結果が、 A-1 NAME-1 300 AAA A-2 NAME-2 1200 CCC と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィードは一番最初を表示させたいのです。 SELECT A.CODE, A.NAME, B.CODE2, SUM(B.KIN) FROM A, B WHERE A.CODE = B.CODE GROUP BY A.CODE, A.NAME,B.CODE2 ORDER BY A.CODE と、すれば A-1 NAME-1 AAA 100 A-1 NAME-1 BBB 200 A-2 NAME-2 CCC 300 A-2 NAME-2 DDD 400 A-2 NAME-2 EEE 500 と、言う結果がでます。(当然ですが) これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。