ホームページ > データベース > mysql チュートリアル > タイムスタンプを含むデータベース内のユーザーごとに最新の行を選択するにはどうすればよいですか?

タイムスタンプを含むデータベース内のユーザーごとに最新の行を選択するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-13 13:06:46
オリジナル
496 人が閲覧しました

How to Select the Most Recent Row per User in a Database with Timestamps?

各ユーザーの最新エントリの取得: データベース ソリューション

チャレンジ:

タイムスタンプとステータス フラグ (「in」または「out」) を含むデータベース テーブル内で各ユーザーの最新レコードを効率的に選択することは、特に同じ最新のタイムスタンプを共有する複数のエントリがあるユーザーの場合、複雑になる可能性があります。

アプローチ:

この問題は、2 つの異なる SQL クエリを使用して解決されます。

1.複数の一致するレコードのクエリ:

このクエリは、各ユーザーの最大タイムスタンプを持つすべてのレコードを識別します。

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.time = (SELECT MAX(t2.time)
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user);</code>
ログイン後にコピー

出力:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

2.単一の一致するレコードのクエリ:

このクエリは、タイムスタンプが同じ場合には最も高い ID を優先して、ユーザーごとに 1 つの最新レコードのみを返します。

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.id = (SELECT t2.id
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user
                 ORDER BY t2.time DESC, t2.id DESC
                 LIMIT 1);</code>
ログイン後にコピー

出力:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

説明:

  • 最初のクエリは、相関サブクエリを使用して各ユーザーの最新のタイムスタンプ (MAX(time)) を検索し、そのタイムスタンプに一致するすべてのエントリを取得します。これは、同じ最新タイムスタンプを持つ複数のレコードがある状況に対処します。
  • 2 番目のクエリは ORDER BY time DESC, id DESC を使用して最新のタイムスタンプを優先し、次に最も高い ID を優先し、LIMIT 1 を使用して単一の確実な最新レコードが選択されるようにします。

これらのクエリのどちらを選択するかは、最新のタイムスタンプを持つすべてのレコードが必要か、それともユーザーごとに 1 つの最新レコードのみが必要かによって異なります。 2 番目のクエリは、レコードが 1 つだけ必要な場合に、より簡潔なソリューションを提供します。

以上がタイムスタンプを含むデータベース内のユーザーごとに最新の行を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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