ホームページ > データベース > mysql チュートリアル > データベース内の各ユーザーの最新の記録日と値を効率的に取得するにはどうすればよいですか?

データベース内の各ユーザーの最新の記録日と値を効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-15 16:56:45
オリジナル
701 人が閲覧しました

How to Efficiently Retrieve the Latest Record Date and Value for Each User in a Database?

各ユーザーの最新のエントリ日付と値の抽出

このガイドでは、ユーザー ログイン エントリのデータベース テーブルを効率的にクエリして、各ユーザーの最新の日付とそれに関連付けられた値を取得する方法を説明します。 従来の結合アプローチと、ウィンドウ関数を使用したより堅牢な方法の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート