SQLのデータ取得に関して


以下の質問をお借りして追加での質問となります。
http://q.hatena.ne.jp/1177119215

select * from testdatabase order by id desc LIMIT 3;

ここではユニークIDを最新の3件取得していますが、IDが重複している場合、
たとえばidが1,2,3,4,5,6,6,6,7,8,9,9,10,11,11とあると、「最新の3件」で「id:11,11,10,9,9」を選びたい場合、どうすべきでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/02/04 13:40:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント35pt

使用しているデータベースとバージョンはご提示ください。


サブクエリが使用できるデータベースなら、

 SELECT * FROM testdatabase
 WHERE id IN ( SELECT DISTINCT id FROM testdatabase ORDER BY id DESC LIMIT 3 )
 ORDER BY id DESC;

でどうでしょうか。

id:dekapurio

返信有難うございます。

いまさらですが、MYSQLは5.1です。

サブクエリを利用するのですね。とても参考になりました。

2010/02/04 13:39:57

その他の回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント35pt

使用しているデータベースとバージョンはご提示ください。


サブクエリが使用できるデータベースなら、

 SELECT * FROM testdatabase
 WHERE id IN ( SELECT DISTINCT id FROM testdatabase ORDER BY id DESC LIMIT 3 )
 ORDER BY id DESC;

でどうでしょうか。

id:dekapurio

返信有難うございます。

いまさらですが、MYSQLは5.1です。

サブクエリを利用するのですね。とても参考になりました。

2010/02/04 13:39:57
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント35pt

基本的にはそのレベルになるとアプリでやった方が良いと思うけどね。

SELECT * FROM testdatabase WHERE
 id IN ( SELECT id FROM testdatabase GROUP BY id ORDER by ID DESC limit 3 )
 ORDER BY id DESC;
id:dekapurio

返信有難うございます。

お二人ともほぼ同様のものなので間違いないと思います。

帰宅したら早速やってみます。

2010/02/04 13:40:08
  • id:taknt
    片方は DISTINCT を用い、もう片方は GROUP BY するやり方。

  • id:dekapurio
    もうご覧になってないと思いますが・・・
    実際はテーブルを結合しており、以下のように記述しましたがエラーになりました。

    SELECT *
    FROM
    testdatabaseA, testdatabaseB
    WHERE
    testdatabaseA.id = testdatabaseB.id
    AND id IN ( SELECT testdatabaseA.id FROM testdatabaseA GROUP BY testdatabaseA.id ORDER by testdatabaseA.id DESC limit 3 )
    ORDER BY testdatabaseA.id DESC
    ;

    MYSQL5.1の環境で以下のようなエラーが出ました。
    'This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
  • id:dekapurio
    (追記)DISTINCT句を使用した場合も同様のエラーでした。
  • id:tail_furry
    ちょっと邪道だけど

    SELECT * FROM testdatabase WHERE id IN (
    SELECT SUB.id FROM (
    SELECT id FROM testdatabase GROUP BY id ORDER BY ID DESC LIMIT 3
    ) SUB
    )
    ORDER BY id DESC

    または

    SELECT * FROM testdatabase WHERE id IN (
    SELECT SUB.id FROM (
    SELECT DISTINCT id FROM testdatabase ORDER BY id DESC LIMIT 3
    ) SUB
    )
    ORDER BY id DESC

    で、どうでしょう?
  • id:taknt
    select * from testdatabase order by id desc LIMIT 3;

    これは エラーが出ないんですよね?
  • id:dekapurio
    tail_furry様、taknt様、コメント有難うございます。

    tail_furry様の方法で表示させることが出来、無事うまくいきました!
    これだったら両方OKでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません