Access SQL でユーザー グループごとに最新の 3 つのレコードを効率的に取得する
データベース管理には、データの特定のサブセットの取得が含まれることがよくあります。 テストスコアの追跡などのシナリオでは、個々のユーザーごとに最新の 3 つのエントリを抽出する必要がある場合があります。このタスクは一見単純に見えますが、最近のレコードの選択とユーザーごとのデータのグループ化を組み合わせる高度な SQL クエリが必要です。
次の SQL クエリは解決策を提供します:
<code class="language-sql">SELECT PR1.LogInID, PR1.Score, PR1.[Date Taken] FROM Progress AS PR1 WHERE PR1.[Date Taken] IN ( SELECT TOP 3 PR2.[Date Taken] FROM Progress PR2 WHERE PR2.LoginID = PR1.LoginID ORDER BY PR2.[Date Taken] DESC ) ORDER BY LoginID, [Date Taken] DESC;</code>
クエリの内訳:
このクエリは、メイン クエリ (外部クエリ) 内のサブクエリ (内部クエリ) を利用して、目的の結果を実現します。
サブクエリ: このネストされたクエリは、一意の LoginID
ごとに、最新の 3 つの「撮影日」値を識別します。これは次のようにして行われます:
[Date Taken]
値を選択します。Progress
テーブル (PR2
) をフィルタリングして、外部クエリ (LoginID
) の PR1.LoginID
に一致するレコードのみを含めます。[Date Taken]
によって結果を降順に並べます。メイン クエリ: 次に、メイン クエリは、Progress
演算子を使用して PR1
テーブル (IN
) をフィルターします。 この演算子は、サブクエリの結果セットに [Date Taken]
値が存在するレコード (つまり、そのユーザーの最新 3 つの日付) のみが含まれるようにします。最後に、読みやすくするために、結果は LoginID
の順に並べられ、次に [Date Taken]
(降順) の順に並べられます。
このアプローチは、各ユーザーの最新の 3 つのスコアを効率的に取得し、[Date Taken]
フィールド内の潜在的な同点を効果的に処理します。 サブクエリと IN
演算子を組み合わせて使用すると、このデータベースの一般的な課題に対する簡潔かつ強力なソリューションが提供されます。
以上がAccess SQLでユーザーグループごとに最近の上位3レコードを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。