質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

解決済

SQLで、最新のレコード(の一覧)を取得したい

illaoi
illaoi

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1回答

0リアクション

0クリップ

258閲覧

投稿2022/09/23 12:57

編集2022/09/24 08:06

前提

LINEのようなチャットのシステムを作っています。
SQL(mysql)で、以下の2つのテーブルを作りました。

chatspace(テーブル名)
・id
・created_at
...(その他のカラム)

comments(テーブル名)
・id
・chatspace_id
・body
・created_at
...(その他のカラム)

各chatspaceに複数のコメントが投稿されるという設計になっています。
(chatspace_idが同一のcommentsのレコードが複数存在する。)

実現したいこと

LINEのトーク一覧画面のような表示を作るために、
SQLで各chatspaceの情報(全てのカラム)と、
各chatspace中(comments.chatspace_idが同じレコード)の最新(comments.created_atが最大のレコード)の
comments.bodyとcomments.created_at AS commented_atを取得したいです。

JOINやサブクエリ等、関係しそうな情報を調べ試したのですが、実現できなかったのでご教示いただきたいです。
よろしくお願いいたします。

試したこと

・commentsテーブルで、GROUP BY chatspace_idで、idとMAX(created_at)を取得する。次に、これをサブクエリとしてchatspaceの情報を取得。

サブクエリの、

SQL

SELECT chatspace_id, body, MAX(created_at) FROM comments GROUP BY chatspace_id;

の部分で、sql=only_full_group_byが必要というエラーが発生。
(bodyを指定しなければ取得可能。)

・INNER JOINで結合する
→comments.created_atが最大のレコードのみを取得することができない(GROUP BYを使うとsql=only_full_group_byが必要というエラーが発生)

・サブクエリとしてcommentsテーブルを取得しする。このときにWHERE句で>(greater than sign)を使って最大値のみにする。

うまくいかなかったのですが、
参考にしたサイトを見失ってしまい、エラーを含め再現できなくなってしまいました。
(docker上で試し、downしてしまったのでログも辿れませんでした)

補足情報(FW/ツールのバージョンなど)

mysql
(最終的にはGORMを使用するので、SQLよりGORMの方が書きやすければGORMで示していただいても結構です。)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/23 13:21依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

illaoi

2022/09/23 14:42

初めての質問で勝手がわかっていないので、 もし質問の内容に不備等があればご指摘いただければ幸いです。
m.ts10806

2022/09/23 20:19

まず自身が試したことを記載されると良いかと。 調べただけでは実現できないのは当然で、何かしら試したうえで実現できなかったのであれば、 その内容をもって質問としてください。質問は編集できます。 あと「最新」だと1件にしかならないのでは? コメントが編集可能で履歴を持っているわけではないですよね?
KoichiSugiyama

2022/09/24 00:32

m.ts10806さんも書かれているように、質問者さんが考えるここでの「最新」の定義を明確にした方がアドバイスは集まりやすいと思います。例えば、「表示した時間の1時間前までに更新されたものを最新と考える」等追記してみてはどうでしょうか。 なんとなくやりたいことがわからないでもないですが、今のままだと推測でしか話ができないので、回答に二の足を踏む方が多いと思います。
illaoi

2022/09/24 08:03

「最新」の定義と、試したことを記載しました。 ご指摘ありがとうございます。他にも不備があればご指摘いただければ幸いです。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます