• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文を教えてください)

SQL文の使い方とテーブルから日付順にIDを取得する方法

このQ&Aのポイント
  • SQL文を使用して、テーブルから日付順にIDを取得する方法について教えてください。
  • データを表示するためのSQL文が分からず悩んでいます。テーブルから各IDを10件まで日付順に取り出すことは可能でしょうか。
  • 具体的には、1つのページに10件までの日付順で並んだIDのデータを表示したいです。IDごとにまとめられ、最も新しい日付のデータが上に表示されるようにしたいです。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.3

補足です。 WHERE句のサブクエリに LIMIT を使うと下記の様に出来ますね。 リレーショナル演算子ではない ORDER BY / LIMIT を検索条件に入れるのは、ちょっときたない感じがしますが。 SELECT * FROM hoge_tbl a WHERE date IN (SELECT date FROM hoge_tbl b WHERE a.id = b.id ORDER BY date DESC LIMIT 10) AND id IN (SELECT id FROM hoge_tbl c GROUP BY id ORDER BY MAX(date) DESC LIMIT 10) ORDER BY (SELECT MAX(date) FROM hoge_tbl e WHERE a.id = e.id) DESC, id, date DESC, data

bulldozerQ
質問者

お礼

お礼が遅くなって申し訳ありません。 質問したSQL文の件は、無理があってダメなんだろうとほとんどあきらめていたのですが、実現でき感激しております。 サブクエリーをうまく使うことで、通常ではできないようなこともなんとかなってしまうのですね。 感謝してもしきれません。 本当にありがとうございました。

その他の回答 (2)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

> できればデータすべてを取り出すのではなく、 > 必要な数だけ取り出すようにしたいところです。 かなり強引ですが、下記の様にすればできるとは思います。 ただし、MySQL では未確認です。 SELECT * FROM hoge_tbl a WHERE (SELECT COUNT(*) FROM hoge_tbl b WHERE a.id = b.id AND a.date < b.date) < 10 AND (SELECT COUNT(*) FROM ( SELECT id FROM hoge_tbl c GROUP BY id HAVING MAX(date) > (SELECT MAX(date) FROM hoge_tbl d WHERE a.id = d.id) ) tmp) < 10 ORDER BY (SELECT MAX(date) FROM hoge_tbl e WHERE a.id = e.id) DESC, id, date DESC, data

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

「表示するIDは10件まで」以外のことは、下記の様なSQLで出来るかと。 ただし、MySQL では未確認です。 SELECT * FROM hoge_tbl a WHERE (SELECT COUNT(*) FROM hoge_tbl b WHERE a.id = b.id AND a.date < b.date) < 10 ORDER BY (SELECT MAX(date) FROM hoge_tbl c WHERE a.id = c.id) DESC, id, date DESC, data ;

bulldozerQ
質問者

お礼

お礼が遅くなり申し訳有りませんでした。 お答えいただきどうもありがとうございます。 やはり上記のような条件では「表示するIDは10件まで」にするのは難しいのでしょうか。 お教えいただいた例をもとにLIMIT句を付け加えてみましたが、うまくいきませんでした。 やはり、できればデータすべてを取り出すのではなく、必要な数だけ取り出すようにしたいところです。 もう少し自分で考えてみます。 ありがとうございました。