ホームページ >データベース >mysql チュートリアル >データベース内の各グループの最新レコードを効率的に取得するにはどうすればよいですか?
GROUP BY によるグループ内の最新レコードの決定
同様のグループ化基準を持つ複数のレコードが含まれるデータベース シナリオでは、一般的なタスクは取得することです。各グループの最新レコード。これは、各ユーザーからの最新のメッセージが必要なメッセージング プラットフォームで例として挙げられます。
最初の試行と欠点
最初のアプローチには、GROUP BY 句を使用して、次のクエリに見られるように、レコードを個別のグループに集約します。
SELECT * FROM messages GROUP BY from_id
ただし、このクエリは
クエリ解決
各グループの最新のレコードを取得するには、より洗練されたアプローチが必要です。これには以下が含まれます:
サブクエリ: 次のサブクエリを使用して各グループ内の最新のタイムスタンプ値を決定します:
SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id
結合サブクエリ: に参加します。サブクエリを含む元のメッセージ テーブル。from_id 列と timestamp 列が一致します。
SELECT t1.* FROM messages t1 JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
このクエリは、メッセージ テーブル内の個別の from_id ごとに最新のメッセージを生成し、最初の懸念事項に対処します。
以上がデータベース内の各グループの最新レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。