最新から100行のSELECT文を正しく取得する方法

このQ&Aのポイント
  • データベースの最新から100行のデータを取得する方法を教えてください。
  • SELECT文を使用して、lognoが1902~2001のデータを最新順に取得する方法を教えてください。
  • 順序が逆にならないように最新から100行のデータを正しく取得する方法を教えてください。
回答を見る
  • ベストアンサー

最新から100行のSELECT文

タイトルわかりにくくてすみません・・・ logno | value 1 | abc 2 | bcd ・ ・ ・ 2000 | def 2001 | efg のようなデータがあるとします。(データは2002,2003とどんどん追加されます。) このとき、lognoが1902~2001(つまり最新から100行)のデータを読み込むSELECT文を教えてください。 SELECT * FROM table_name ORDER BY logno DESC LIMIT 100; のようにして今まで取り込んできましたが、これでは順序が逆になってしまいます。(2001,2000...の順になってしまう) 逆にならない方法を教えてください。

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

副問い合わせを使ってみたらどうでしょう。 select * from (SELECT * FROM table_name ORDER BY logno DESC LIMIT 100) b order by logno; bは、別名で何か必要です。

deefdeef
質問者

お礼

うまくいきました!ありがとうございました! 副問い合わせについて、調べてみようとおもいます。

関連するQ&A

  • select文について

    1つのデータの前後のデータを取得する場合、何か簡単に取得するselect文はありますでしょうか? 例) no name adress 1  山田  東京 3  山本  名古屋 6  田中  大阪 7  高橋  福岡 上記のようなテーブルがあった場合で、noが6の前後のデータを取得する場合、以下のように考えてみましたが他に簡単にデータを取得する方法はないでしょうか? なお、noが6の前後の数字(3や7)は変更される場合がある為、select文の際にno=3やno=7と固定する事は出来ません。 ・noが6の前のデータ(noが3)のデータを取得する場合 select adress table where no<6 oder by no limit 1 ・noが6の次のデータ(noが7)のデータを取得する場合 select adress table where no>6 oder by no limit 1 分かりにくい説明で申し訳ありませんが、どなたかよろしくお願いいたします。

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

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL
  • 最新のものからデータを10件づつ昇順で並べたい

    MySQLで、最新のものからデータを10件づつ昇順で並べたいと思っています。 最新のデータを1ページ10件ごとに収めていきたいので(最初のページを半端にしたくないので)、データを降順に取り出し、それぞれ取り出した10件ごとに昇順で並べ変えることが出来ないかと、いろいろ工夫をしましたが行き詰っています。PHPスクリプト(一部ですが)は次のように書いています。 $from = ($page-1)*10; $query = "SELECT * FROM table ORDER BY age DESC, sinchou DESC, taijyuu DESC LIMIT 10 OFFSET $from"; 1.降順で取り出したデータ10件を昇順に並べ替えるにはどのようにすれば良いでしょうか? 2.最新のものからデータを10件づつ昇順で並べるための良い方法が、上記の他にありますでしょうか? なにかご示唆を頂ければ有難いです。よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Accessで最新レコード20件を表示させるには

    Access2000のクエリで、最新のレコード20件を表示させたい場合どのようにしたら良いでしょうか? レコード番号があり、最新番号が100の場合、80~100を表示させたいのですが。 SQLベースだと SELECT no_c FROM table ORDER no_c DESC limit 20 など、limitが使えますが、Accessでこれに該当するものはありますか?

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • select case文について

    VB6.0のSelect Case文について質問です。 現在、ある文字列(mojiretu)の中から特定の文字を検索して その文字が文字列(mojiretu)の中に存在したらチェックボックスにチェックという一連の処理を行いたいのですがうまくいきません>< このSelect Case文のどこを直すべきでしょうか? select case mojiretu case instr(mojiretu,"abc") chk1.value=1 case instr(mojiretu,"def") chk2.value=1 case else chk3.value=1 end select

  • SQL(oracle)での並べ替え

    SQL(oracle)での並べ替えで質問がございます。 TABLE:AAA NO, NAM,GNo, DATE ------------------ 1, abc, 3, 09/01 2, bcd, 2, 08/25 3, cde, 2, 08/23 4, def, 3, 09/05 5, efg, 1, 09/03 6, fgh, 3, 08/21 のようなテーブルがあったときに、下記条件で並べ替えを したいと思っています。 1.GNo毎に最小のDATEを抽出し、各Gnoの最小のDATEのうち   小さいGNoのグループでソート。 2.1で同一GNo内ではDATEが小さい順にソート。 つまり、上記の例では、各GNoの最小のDATEは、 1・・・09/03 2・・・08/23 3・・・08/21 なので、これからDATEの小さい順に、GNoが 3、2、1の順にソートをします。各GNo毎にもDATEが小さい順に ソートをするので、結果として、 NO, NAM,GNo, DATE ------------------ 6, fgh, 3, 08/21 1, abc, 3, 09/01 4, def, 3, 09/05 3, cde, 2, 08/23 2, bcd, 2, 08/25 5, efg, 1, 09/03 のような順番にしたいのです。この結果のようにするには、 どのようなSQLにすればよいでしょうか? よろしくお願いいたします。

  • 1列について重複行を除いて全列をSELECTするSQL文

    A B C 1 2 10-01 2 3 10-01 3 2 10-02 4 1 10-03 5 3 10-04 MYSQLで上のようなTABLEから、B列についてCが最新の日付の行を1行ずつ、且つ全列抽出したいです。想定する結果は下記の通りです。 3 2 10-02 4 1 10-03 5 3 10-04 SELECT DISTINCT A FROM table_name ORDER BY C DESC だとB,C列は抽出されず、DIATINCT A,B,Cだと全行抽出されてしまう。 GROUP BY B は平均や集計なら使えるでしょうが最新の1行でないし。 どんなSQL文にすれば良いのでしょうか。よろしくお願いします

    • ベストアンサー
    • MySQL
  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • Selectした時のレコードの取得順

    SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると  (1)Select * From TableA ;  (2)Select * From TableA Order by Data1 Asc;  (3)Select * From TableA Order by Data1 Asc, No Asc;  (1)(2)(3)全て、次の順で返ってきました。   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500  しかし、(2)のSQLは、データによって  次の順で返ってくることがありました。   3| AAA | 300   1| AAA | 100   2| AAA | 200   4| ABC | 400   5| BBB | 500    1~3レコード目までは全てData1がAAAのレコードですが  特に指定していなくても、No(PK)の順になるのかと思っていました。    なお、レコードができた(Insert順)でもなさそうです。  この、順番は何で決まっているのでしょうか?