各グループの最新のエントリ
目標は、
のようなデータベーステーブルから各ユニークなグループの最新エントリを取得することです。このテーブルには、一連のドキュメントステータス変更レコードが含まれており、各ドキュメントはで識別されます。タスクは、各ドキュメントの最新の更新ステータスとその関連付け日を抽出することです。 DocumentStatusLogs
DocumentID
データベースの標準化を検討してください
まず、データベース設計が正しく標準化されているかどうかを検討する必要があります。ステータス情報は、親テーブルまたはサブテーブルに保存する必要がありますか?各ドキュメントの現在の状態にのみアクセスする必要がある場合は、ステータスフィールドを親テーブルに直接追加して、個別のテーブルを使用してステータスの変更を追跡しないようにすることをお勧めします。ただし、州の更新の履歴記録を保持する必要がある場合は、州の変更を別のテーブルに維持することがより有利です。
トップエントリを取得最初の問題に戻ると、各グループのトップエントリを直接取得するためのポリマー機能が構築されていません。したがって、必要な結果を達成するには、追加のクエリまたはサブQuerieを達成する必要があります。 お問い合わせcte
1つの方法は、パブリック式式(CTE)を作成して中間結果を生成することです。 の名前が付けられたCTEは、各エントリに行番号を追加することにより、元のテーブルを強化します。この行番号は各グループで生成され、
の下降順序に従って配置されます。 このクエリは、テーブルから1に等しい行番号(RN)がある行を選択し、各
グループの上部エントリを効果的に提供します。
cte
代替方法DocumentID
DateCreated
<code class="language-sql">WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn FROM DocumentStatusLogs ) SELECT * FROM cte WHERE rn = 1</code>
の代わりにcte
関数を使用することです。 DocumentID
特定の日付のすべてのエントリが同じランキングを取得することを保証します。
結論 上記のテクノロジーを使用することにより、各グループの最新のエントリを効果的に抽出して、サブクエリCTEを使用するか、
関数を使用できます。選択した方法は、データ要件とパフォーマンスの考慮事項によって異なります。以上がデータベーステーブルの各グループの最新エントリを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。