各ユーザーの最新のエントリ日付と値の抽出
このガイドでは、ユーザー ログイン エントリのデータベース テーブルを効率的にクエリして、各ユーザーの最新の日付とそれに関連付けられた値を取得する方法を説明します。 従来の結合アプローチと、ウィンドウ関数を使用したより堅牢な方法の 2 つの方法を検討します。
方法 1: サブクエリによる内部結合
一般的なアプローチでは、サブクエリとの内部結合を利用して、各ユーザーの最大日付を見つけます。
<code class="language-sql">select t.username, t.date, t.value from MyTable t inner join ( select username, max(date) as MaxDate from MyTable group by username ) tm on t.username = tm.username and t.date = tm.MaxDate</code>
このクエリは、各ユーザー名の最新レコードを効果的に取得します。 ただし、潜在的な欠点は、特定のユーザーに対して複数のレコードが同じ最大日付を共有する場合、複数のエントリが返される可能性があることです。
方法 2: 重複した日付を処理するためのウィンドウ関数
潜在的な重複する日付を処理するには、ウィンドウ関数が優れたソリューションを提供します。
<code class="language-sql">select x.username, x.date, x.value from ( select username, date, value, row_number() over (partition by username order by date desc) as _rn from MyTable ) x where x._rn = 1</code>
このメソッドは、日付の降順で各ユーザーの各レコードに一意のランクを割り当てます。 ランク 1 (_rn = 1
) の行をフィルター処理することにより、同じ最新日付を持つ複数のエントリが存在する場合でも、単一の最新レコードの取得が保証されます。 これにより正確さが保証され、曖昧さが回避されます。
以上がデータベース内の各ユーザーの最新の記録日と値を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。