Access SQL: ユーザーごとの上位 N レコードの抽出
このガイドでは、単一の SQL クエリを使用して、Access データベース内の各ユーザーの最新レコードの上位 3 つを取得する方法を説明します。 このタスクにはネストされたクエリを利用します。
データベース構造
私たちのデータベースは 2 つのテーブルで構成されています:
LoginID
、Forename
、Surname
、DOB
、Guardian Forename
、Guardian Surname
、Telephone Number
ProgressID
、LoginID
、Score
、Date Taken
解決策: ネストされたクエリ
単一クエリ内で TOP N
を使用する単純なアプローチは、Access SQL では、この特定の要件 (グループごとに上位 N を取得する) に対して直接サポートされていません。 代わりに、サブクエリを使用してこれを実現します。
内部クエリは、各 Date Taken
の上位 3 つの LoginID
値を特定します。
<code class="language-sql">SELECT TOP 3 PR2.[Date Taken] FROM Progress AS PR2 WHERE PR2.LoginID = PR1.LoginID ORDER BY PR2.[Date Taken] DESC</code>
この結果セットは、外側のクエリの IN
句で Progress
テーブルをフィルタリングするために使用されます。
<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 AS PR2 WHERE PR2.LoginID = PR1.LoginID ORDER BY PR2.[Date Taken] DESC ) ORDER BY PR1.LoginID, PR1.[Date Taken] DESC;</code>
この最後のクエリは、LoginID
ごとに 3 つの最新レコードを効率的に返します。LoginID
の順に、次に Date Taken
の順に降順 (最新のものから順) に整然と並べられています。 これにより、Access SQL 内のグループ化されたデータに TOP N
を直接適用する際の制限が回避されます。
以上がAccess SQL で各ユーザーの上位 N レコードを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。