ホームページ >データベース >mysql チュートリアル >SQL を使用して最新のユーザー アクティビティ レコードを効率的に取得するにはどうすればよいですか?
SQL を使用して最新のユーザー アクティビティ レコードを効率的に取得します
この記事では、SQL を介してデータベースにクエリを実行して、各ユーザーの最新のアクティビティ記録日を取得する方法について説明します。
ユーザーのログイン イベントを記録するデータベース テーブルがあるとします。
用户名 | 日期 | 数值 |
---|---|---|
brad | 2010-01-02 | 1.1 |
fred | 2010-01-03 | 1.0 |
bob | 2009-08-04 | 1.5 |
brad | 2010-02-02 | 1.2 |
fred | 2009-12-02 | 1.3 |
簡単な方法:
簡単なアプローチは、内部結合を使用してユーザー名と最新の日付を一致させることです。
<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>
ただし、このアプローチでは、同じ日付の重複レコードが発生する可能性があります。
ウィンドウ関数を使用する:
重複レコードの問題を解決するには、ウィンドウ関数を使用できます。
<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>
このクエリは、行パーティショニングと ROW_NUMBER() 関数を利用して、各ユーザーの各レコードにランクを割り当てます。最も高いランクが最新のレコードを示します。 WHERE 句により、各ユーザーの最新のアクティビティを表すランク 1 のレコードのみが選択されるようになります。
以上がSQL を使用して最新のユーザー アクティビティ レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。